Lokaltid Hur man berättar aktuell tid i Perl

Perl har en praktisk inbyggd funktion för att hitta aktuellt datum och tid i dina skript. Men när vi pratar om att hitta tiden, talar vi om den tid som för närvarande är inställd på maskinen som kör skriptet. Om du till exempel kör ditt Perl-skript på din lokala maskin kommer localtime att returnera den aktuella tiden du har ställt in och antagligen inställt på din nuvarande tidszon.

När du kör samma skript på en webbserver, kan det hända att lokaltid där är avstängd från lokaltid på ditt skrivbordssystem. Servern kan befinna sig i en annan tidszon eller ställa in felaktigt. Varje maskin kan ha en helt annan uppfattning om vad lokaltid är och det kan ta några justeringar, antingen inom skriptet eller på själva servern, för att få den att matcha det du förväntar dig.

Lokalitetsfunktionen returnerar en lista full av data om aktuell tid, varav några måste justeras. Kör programmet nedan så ser du varje element i listan tryckt på linjen och separerade med mellanslag.

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

Du borde se något liknande det, även om antalet kan vara mycket annorlunda.

20 36 8 27 11 105 2 360 0

Dessa delar av aktuell tid är i ordning:

  • Sekunder förbi minuten
  • Minuter över timmen
  • Timmar över midnatt
  • Månadens dag
  • Månader över årets början
  • Antal år sedan 1900
  • Antal dagar sedan veckans början (söndag)
  • Antal dagar sedan årets början
  • Huruvida sommartid är aktivt eller inte

Så om vi återgår till exemplet och försöker läsa det, ser du att det är 08:36:20 AM den 27 december 2005, det är två dagar över söndagen (tisdag), och det är 360 dagar sedan starten av år. Sommartid är inte aktivt.

Att göra Perl-läget läsbart

Några av elementen i matrisen som lokal tid returnerar är lite besvärliga att läsa. Vem skulle tänka på det innevarande året i termer av antalet år tidigare 1900? Låt oss ta en titt på ett exempel som gör vårt datum och tid tydligare.

 #! / Usr / local / bin / perl

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

 @weekDays = qw (Sön Man Tis Ons Tor Fre Lör Sön);

 ($ sekund, $ minut, $ timme, $ dayOfMonth, $ månad, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = lokaltid ();

 $ år = 1900 + $ årOffset;

 $ theTime = "$ hour: $ minute: $ second, $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth, $ year";

 skriv ut $ theTime; 

När du kör programmet bör du se ett mycket mer läsbart datum och tid så här:

 9:14:42, ons 28 december 2005 

Så vad gjorde vi för att skapa den mer läsbara versionen? Först förbereder vi två matriser med namnen på veckans månader och dagar.

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

 @weekDays = qw (Sön Man Tis Ons Tor Fre Lör Sön); 

Eftersom localtime-funktionen returnerar dessa element i värden som sträcker sig från 0-11 respektive 0-6 är de perfekta kandidater för en matris. Värdet som returneras med lokal tid kan användas som en numerisk adress för att komma åt rätt element i matrisen.