2009-01-28 4 views
11

Je dois lire l'horloge système (heure et date) et l'afficher dans un format lisible par l'homme en Perl.Comment lisez-vous l'heure et la date du système en Perl?

Actuellement, je suis en utilisant la méthode suivante (que je trouvais here):

#!/usr/local/bin/perl 
@months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); 
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun); 
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); 
$year = 1900 + $yearOffset; 
$theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year"; 
print $theTime; 

Lorsque vous exécutez le programme, vous devriez voir une date beaucoup plus lisible et le temps comme celui-ci:

9:14:42, Wed Dec 28, 2005 

Cela semble être plus à des fins d'illustration que pour un code de production réel. Y a-t-il une manière plus canonique?

Répondre

19

Utilisez la fonction localtime:

Dans un contexte scalaire, localtime() retourne ctime (3) Valeur:

$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" 
+0

Merci, je faisais beaucoup plus difficile qu'il devait être. :) –

+1

Notez que 'localtime' est le format (a?) US de l'heure locale; Si vous voulez vraiment fournir la sortie, vous devez travailler un peu plus fort. –

8

Comme quelqu'un d'autre mentionné, vous pouvez utiliser localtime, mais Je l'analyserais avec Date::Format. Il vous donnera l'horodatage formaté de la façon dont vous en avez besoin.

+0

Merci pour le lien. J'en aurai vraiment besoin pour mettre la date et l'heure dans le format standard américain. –

+0

Lien permanent vers [Date :: Format] (http://search.cpan.org/dist/TimeDate/lib/Date/Format.pm) –

+0

Date: Le format semble plutôt inutile. Comme les gens l'ont mentionné, POSIX :: strftime fait tout cela. –

14

Vous pouvez utiliser localtime pour obtenir l'heure et le strftime du module POSIX pour le formater. Bien que ce soit sympa d'utiliser Date :: Format et son strftime parce qu'il utilise moins de temps système, le module POSIX est distribué avec Perl, et il est donc pratiquement garanti qu'il soit sur un système donné.

use POSIX; 
print POSIX::strftime("%A, %B %d, %Y", localtime()); 
# Should print something like Wednesday, January 28, 2009 
# ...if you're using an English locale, that is. 
# Note that this and Date::Format's strftime are pretty much identical 
+2

En Perl> = 5.10 moderne, je recommande également Time :: Piece (http://perldoc.perl.org/Time/Piece.html) –

8

Comme tout le monde l'a dit, "localtime" est la façon dont vous apprivoisez la date, d'une manière simple et directe.

Mais juste pour vous donner une option de plus. Le DateTime module. Ce module est devenu un de mes préférés.

use DateTime; 
my $dt = DateTime->now; 

my $dow = $dt->day_name; 
my $dom = $dt->mday; 
my $month = $dt->month_abbr; 
my $chr_era = $dt->year_with_christian_era; 

print "Today is $dow, $month $dom $chr_era\n"; 

Ceci afficherait "Aujourd'hui c'est mercredi, 28 janvier 2009AD". Juste pour montrer quelques-unes des nombreuses choses qu'il peut faire.

use DateTime; 
print DateTime->now->ymd; 

Il imprime « 2009-01-28 »

+0

Et, pour une flexibilité ultime, un objet DateTime a une méthode 'strftime'. –

Questions connexes