Hoe lees je de systeem tijd en datum in Perl?

Ik nodig voor het lezen van de systeem klok (tijd en datum) en weer te geven in een leesbare indeling in Perl.

Momenteel gebruik ik de volgende methode (die ik gevonden hier):

#!/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; 

Wanneer u het programma uitvoert, moet u een veel beter leesbaar datum en tijd als deze:

9:14:42, Wed Dec 28, 2005 

Dit lijkt zoals het is meer ter illustratie dan voor de daadwerkelijke productie code. Is er een meer canonieke manier?

 

4 Replies
  1. 19

    Gebruik localtime functie:

    In scalaire context, localtime() geeft als resultaat
    de ctime(3) waarde:

    $now_string = localtime;  # e.g., "Thu Oct 13 04:54:34 1994"
    • Bedankt, ik was waardoor het een stuk moeilijker dan het nodig is worden. 🙂
    • Merk op dat ‘localtime’ is de (een?) ONS indeling van de lokale tijd; als je echt wilt om de uitvoer, je moet een beetje harder.
  2. 14

    Kunt u gebruik maken van localtime om de tijd en de POSIX-module strftime voor de opmaak.

    Terwijl het zou leuk zijn om te gebruiken Datum::Format en de strftime omdat het gebruik maakt van minder overhead, de POSIX-module is verdeeld in Perl, en is dus vrijwel gegarandeerd te worden op een bepaald systeem.

    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
  3. 8

    Als iedereen zei: “lokale” is de manier waarop u het temmen van datum, in een gemakkelijk en rechtstreeks doorsturen manier.

    Maar het geeft u nog een optie. De Datum /tijd module. Deze module heeft een beetje een favoriet van mij.

    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";

    Dit zou print “Vandaag is het woensdag, 28 Jan 2009AD”. Gewoon om te pronken met een paar van de vele dingen kan doen.

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

    Het wordt afgedrukt “2009-01-28”

    • En, voor de ultieme flexibiliteit, een DateTime-object heeft een strftime methode.
  4. 8

    Als iemand anders is vermeld, kunt u gebruik maken van localtime, maar ik zou ontleden, met Datum::Format. Het geeft je de timestamp opgemaakt in vrijwel elke manier die u het nodig hebt.

    • Bedankt voor de link. Ik zal zeker nodig zijn om de datum/tijd in de standaard AMERIKAANSE indeling.
    • Permanente link naar Datum::Format
    • Datum::Format lijkt vrij zinloos. Als mensen al hebben gezegd, POSIX::strftime doet dat.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *