Category: Date
Author/Contact Info Mago
marco.lima@guapimirim.pm.org
Description: Para os membros ou futuros membros da lingua portuguesa.
Está função retorna a data atual, formatada em um padrão específico.
Deve ser informado o formato desejado, conforme os formatos definidos na função.
sub TimeStamp {
          my($format) = $_[0];
          my($return);
          (my $sec,my $min,my $hour,my $mday,my $mon,my $year,my $wday
+, my $yday, my $isdst) = localtime();
          $year = $year + 1900;
          $mon = $mon + 1;
          if (length($mon)  == 1) {$mon = "0$mon";}
          if (length($mday) == 1) {$mday = "0$mday";}
          if (length($hour) == 1) {$hour = "0$hour";}
          if (length($min)  == 1) {$min = "0$min";}
          if (length($sec)  == 1) {$sec = "0$sec";}
          if ($format == 1) {$return = "$year\-$mon\-$mday $hour\:$min
+\:$sec";}
          if ($format == 2) {$return = $mon . $mday . $year;}
          if ($format == 3) {$return = substr($year,2,2) . $mon . $mda
+y;}
          if ($format == 4) {$return = $mon . $mday . substr($year,2,2
+);}
          if ($format == 5) {$return = $year . $mon . $mday . $hour . 
+$min . $sec;}
          if ($format == 6) {$return = $year . $mon . $mday;}
          if ($format == 7) {$return = $mday .'/'. $mon .'/'. $year .'
+ '. $hour .':'. $min .':'. $sec;}
          if ($format == 8) {$return = $year . $mon . $mday . $hour . 
+$min;}
          if ($format == 9) {$return = $mday . '/' . $mon . '/' . $yea
+r;}
          return $return;
}
Replies are listed 'Best First'.
Re: Formata Data
by Corion (Patriarch) on Jul 08, 2003 at 21:05 UTC

    Even though my portuguese is bad, I hope you'll understand this :

    What's wrong with using the POSIX function strftime() ? If you insist on numeric codes, you could rewrite your function as :

    Que é errado com usar o função strftime() de POSIX? Se você insistisse em códigos numéricos, você poderia reescrever sua função como :

    use POSIX qw(strftime); my @formats = ( undef, '%Y-%m-%d %H:%M:%S', '%m%d%Y', '%y%m%d', '%d%m%y', '%Y%m%d%H%M%S', '%Y%m%d', '%d/%m/%Y. %H:%M:%S', '%Y%m%d%H%M', '%d/%m/%Y', ); sub TimeStamp { my $f = shift; return strftime($format[$f], localtime); }

    but there is no sense in having many predefined formats that you reference by number. Either have constants or use the strftime format strings directly.

    perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web
      Thanks Corion ...

      I could rewrite my function ?

      use POSIX qw(strftime); sub TimeStamp { my $f = shift; my @formats = (undef, '%Y-%m-%d %H:%M:%S', '%m%d%Y', '%y%m%d', '%d%m%y', '%Y%m%d%H%M%S', '%Y%m%d', '%d/%m/%Y. %H:%M:%S', '%Y%m%d%H%M', '%d/%m/%Y', ); return strftime($format[$f], localtime); }

      Mas se eu utilizar códigos numéricos eu posso alterar todas as datas do meu programa apenas alterando o código na função TimeStamp() ...

      If you using numeric codes, you could change all dates.

      example: Cascate Style Sheet

      The formats are defined in function TimeStamp().

      use POSIX qw(strftime); sub TimeStamp { my $format = shift; if ($format == 1) {return strftime('%Y-%m-%d %H:%M:%S', localtime);} if ($format == 2) {return strftime('%m%d%Y', localtime);} if ($format == 3) {return strftime('%y%m%d', localtime);} if ($format == 4) {return strftime('%d%m%y', localtime);} if ($format == 5) {return strftime('%Y%m%d%H%M%S', localtime);} if ($format == 6) {return strftime('%Y%m%d', localtime);} if ($format == 7) {return strftime('%d/%m/%Y. %H:%M:%S', localtime); +} if ($format == 8) {return strftime('%Y%m%d%H%M', localtime);} if ($format == 9) {return strftime('%d/%m/%Y', localtime);} return strftime(undef, localtime); }