Lokalno vrijeme: Kako znati trenutno vrijeme u Perlu

click fraud protection

Perl ima praktičnu ugrađenu funkciju za pronalaženje trenutnog datuma i vremena u vašim skriptama. Međutim, kada govorimo o pronalaženju vremena, govorimo o vremenu koje je trenutno postavljeno na stroju koji pokreće skriptu. Na primjer, ako na lokalnom stroju pokrećete Perl skriptu, localtime će vratiti trenutno vrijeme koje ste postavili i, pretpostavlja se, postaviti u vašu trenutnu vremensku zonu.

Kad istu skriptu pokrenete na web poslužitelju, možda ćete naći da je lokalno vrijeme isključeno od lokalnog vremena na vašem stolnom sustavu. Poslužitelj je možda u drugoj vremenskoj zoni ili je postavljen pogrešno. Svaki stroj može imati potpuno različitu predodžbu o tome što je lokalno vrijeme i možda će biti potrebno podešavanje, bilo unutar skripte, bilo na samom poslužitelju, kako bi se ono uskladilo s onim što očekujete.

Funkcija localtime vraća popis pun podataka o trenutnom vremenu, od kojih će neke trebati prilagoditi. Pokrenite program u nastavku i vidjet ćete svaki element na popisu ispisan na liniji i razdvojen razmacima.

instagram viewer
#! / Usr / local / bin / perl
@timeData = localtime (vrijeme);
print join ('', @timeData);

Trebali biste vidjeti nešto slično ovome, iako bi broj mogao biti vrlo različit.

20 36 8 27 11 105 2 360 0

Ovi elementi tekućeg vremena su kako bi:

  • Sekundi nakon minute
  • Minut prije sata
  • Satima iza ponoći
  • Dan u mjesecu
  • Mjeseci nakon početka godine
  • Broj godina od 1900
  • Broj dana od početka tjedna (nedjelja)
  • Broj dana od početka godine
  • Bez obzira na dnevna ušteda je aktivan

Dakle, ako se vratimo primjeru i pokušamo ga pročitati, vidjet ćete da je 27. prosinca 2005, 08:36:20, prošlo je 2 dana u nedjelju (utorak), a prošlo je 360 ​​dana od početka godina. Ljetno računanje vremena nije aktivno.

Čineći Perl Localtime čitljiv

Nekoliko je elemenata u nizu koje vraća lokalno vrijeme pomalo je neprijatno za čitanje. Tko bi mislio na tekuću godinu s obzirom na broj godina proteklih 1900.? Pogledajmo primjer koji čini naš datum i vrijeme jasnijim.

 #! / Usr / local / bin / perl

 @months = qw (siječanj veljača ožujak travanj svibanj lipanj srpanj rujan listopad stud. prosinac);

 @weekDays = qw (Ned Pon Uto Sri Pet Pet Sub Ned);

 ($ second, $ minute, $ hour, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();

 $ year = 1900 + $ yearOffset;

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

 ispis $ theTime; 

Kada pokrenete program, trebali biste vidjeti mnogo čitljiviji datum i vrijeme kao što je ovaj:

 9:14:42, srijeda, 28. prosinca 2005 

Pa što smo učinili da stvorimo ovu čitljiviju verziju? Prvo pripremamo dva niza s nazivima mjeseci i dana u tjednu.

 @months = qw (siječanj veljača ožujak travanj svibanj lipanj srpanj rujan listopad stud. prosinac);

 @weekDays = qw (Ned Pon Uto Sri Pet Pet Sub Ned); 

Budući da localtime funkcija vraća ove elemente u vrijednostima od 0-11 odnosno 0-6, oni su savršeni kandidati za niz. Vrijednost koju je vratilo localtime može se koristiti kao numerička adresa za pristup ispravnom elementu u nizu.

 $ months [$ month] $ weekDays [$ dayOfWeek]


Sljedeći je korak dobivanje svih vrijednosti iz localtime funkcije. U ovom primjeru koristimo prečac Perl za automatsko postavljanje svakog elementa u localtime nizu u svoju varijablu. Odabrali smo imena tako da je lako zapamtiti koji je to element.

 ($ second, $ minute, $ hour, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();


Moramo također prilagoditi vrijednost godine. Imajte na umu da localtime vraća broj godina od 1900. godine, pa da bismo pronašli tekuću godinu, trebamo dodati 1900 vrijednosti koju smo dobili.

 $ year = 1900 + $ yearOffset;

Kako reći trenutno GM vrijeme u Perlu

Recimo da želite izbjeći sve moguće konfuzije vremenske zone i sami preuzeti kontrolu nad ofsetom. Dobivanje trenutnog vremena u lokalnom vremenu uvijek će vratiti vrijednost koja se temelji na postavkama vremenske zone na uređaju - poslužitelj u SAD će se vratiti jednokratno, dok će poslužitelj u Australiji vratiti jedan gotovo čitav dan različit zbog vremenske zone Razlike.

Perl ima korisnu funkciju prikazivanja vremena koja radi na točno isti način kao i lokalno vrijeme, ali umjesto da vraća vrijeme određeno za vaš uređaj Vremenska zona, vraća se Univerzalno koordinirano vrijeme (skraćeno UTC, nazvano i Greenwich prosječno vrijeme ili GMT). Jednostavno, funkcija se zove gmtime.

 #! / Usr / local / bin / perl

 @timeData = gmtime (vrijeme);

 print join ('', @timeData); 

Osim činjenice da će vraćeno vrijeme biti isto na svim strojevima, a u GMT-u nema razlike između funkcija gmtime i localtime. Svi podaci i pretvorbe obavljaju se na isti način.

 #! / Usr / local / bin / perl

 @months = qw (siječanj veljača ožujak travanj svibanj lipanj srpanj rujan listopad stud. prosinac);

 @weekDays = qw (Ned Pon Uto Sri Pet Pet Sub Ned);

 ($ second, $ minute, $ hour, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ year = 1900 + $ yearOffset;

 $ theGMTime = "$ sat: $ minuta: $ sekunda, $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth, $ year";

 ispisati $ theGMTime; 

  1. localtime će vratiti trenutno vrijeme na računalu koji pokreće skriptu.
  2. gmtime će vratiti univerzalno Greenwich srednje vrijeme ili GMT (ili UTC).
  3. Povratne vrijednosti možda nisu baš ono što očekujete, pa se pobrinite da ih pretvorite po potrebi.
instagram story viewer