Localtime Hoe de huidige tijd in Perl te vertellen

Perl heeft een handige ingebouwde functie voor het vinden van de huidige datum en tijd in uw scripts. Als we het echter hebben over het vinden van de tijd, hebben we het over de tijd die momenteel is ingesteld op de computer waarop het script wordt uitgevoerd. Als u bijvoorbeeld uw Perl-script op uw lokale computer uitvoert, retourneert localtime de huidige tijd die u hebt ingesteld en vermoedelijk ingesteld op uw huidige tijdzone.

Wanneer u hetzelfde script op een webserver uitvoert, kan het zijn dat localtime op uw desktopsysteem is uitgeschakeld vanaf localtime. De server bevindt zich mogelijk in een andere tijdzone of is onjuist ingesteld. Elke machine kan een totaal ander idee hebben van wat lokale tijd is en het kan enige aanpassing vereisen, hetzij in het script of op de server zelf, om het overeen te laten komen met wat u verwacht.

De functie Localtime retourneert een lijst met gegevens over de huidige tijd, waarvan sommige moeten worden aangepast. Voer het onderstaande programma uit en je ziet elk element in de lijst op de regel worden afgedrukt en gescheiden door spaties.

#! / Usr / local / bin / perl
@timeData = localtime (tijd);
print join (", @timeData);

Je zou iets dergelijks moeten zien, hoewel het aantal heel anders kan zijn.

20 36 8 27 11 105 2 360 0

Deze elementen van de huidige tijd zijn, in volgorde:

  • Seconden voorbij de minuut
  • Minuten voorbij het uur
  • Uren na middernacht
  • Dag van de maand
  • Maanden voorbij het begin van het jaar
  • Aantal jaren sinds 1900
  • Aantal dagen sinds het begin van de week (zondag)
  • Aantal dagen sinds het begin van het jaar
  • Of de zomertijd actief is of niet

Dus als we terugkeren naar het voorbeeld en proberen het te lezen, ziet u dat het 27:36:20 uur is op 27 december 2005, het is 2 dagen na zondag (dinsdag) en het is 360 dagen sinds het begin van de jaar. Zomertijd is niet actief.

De Perl Localtime leesbaar maken

Een paar elementen in de array die localtime retourneert, zijn een beetje lastig om te lezen. Wie zou denken van het lopende jaar in termen van het aantal jaren na 1900? Laten we een voorbeeld bekijken dat onze datum en tijd duidelijker maakt.

 #! / Usr / local / bin / perl

 @months = qw (jan feb mrt apr mei jun jul aug sep okt nov dec);

 @weekDays = qw (zon ma di wo do vr za zo);

 ($ seconde, $ minuut, $ uur, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();

 $ jaar = 1900 + $ jaar Offset;

 $ theTime = "$ uur: $ minuut: $ seconde, $ weekDagen [$ dayOfWeek] $ maanden [$ month] $ dayOfMonth, $ jaar";

 print $ theTime; 

Wanneer u het programma uitvoert, ziet u een veel leesbaardere datum en tijd als deze:

 9:14:42, wo 28 december 2005 

Dus wat hebben we gedaan om deze beter leesbare versie te maken? Eerst bereiden we twee arrays voor met de namen van de maanden en dagen van de week.

 @months = qw (jan feb mrt apr mei jun jul aug sep okt nov dec);

 @weekDays = qw (zon ma di wo do vr za zo); 

Aangezien de localtime-functie deze elementen retourneert in waarden variërend van respectievelijk 0-11 en 0-6, zijn ze perfecte kandidaten voor een array. De waarde die door localtime wordt geretourneerd, kan worden gebruikt als een numeriek adres om toegang te krijgen tot het juiste element in de array.