Localtime: Ako zistiť aktuálny čas v Perl

perl má praktickú vstavanú funkciu na zisťovanie aktuálneho dátumu a času vo vašich skriptoch. Keď však hovoríme o nájdení času, hovoríme o čase, ktorý je aktuálne nastavený na počítači, na ktorom je spustený skript. Napríklad, ak máte spustený skript Perl na lokálnom počítači, miestny čas vráti aktuálny čas, ktorý ste nastavili, a pravdepodobne bude nastavený na vaše aktuálne časové pásmo.

Keď spustíte rovnaký skript na webovom serveri, možno zistíte, že miestny čas je vypnutý z miestneho času na vašom stolnom systéme. Server sa môže nachádzať v inom časovom pásme alebo môže byť nastavený nesprávne. Každý počítač môže mať úplne inú predstavu o tom, čo je miestny čas, a môže si to vyžiadať určité úpravy, buď v skripte alebo na samotnom serveri, aby sa prispôsobilo tomu, čo očakávate.

Funkcia localtime vráti zoznam plný údajov o aktuálnom čase, z ktorých niektoré bude potrebné upraviť. Spustite program nižšie a uvidíte každý prvok v zozname vytlačený na riadku a oddelený medzerami.

#! / Usr / local / bin / perl
@timeData = miestny čas (čas);
print join ('', @timeData);
instagram viewer

Mali by ste vidieť niečo podobné tomuto, aj keď ich počet sa môže veľmi líšiť.

20 36 8 27 11 105 2 360 0

Tieto prvky aktuálneho času sú v tomto poradí:

  • Sekundy za minútu
  • Minúty za hodinu
  • Hodiny po polnoci
  • Deň v mesiaci
  • Mesiace po začiatku roka
  • Počet rokov od roku 1900
  • Počet dní od začiatku týždňa (nedeľa)
  • Počet dní od začiatku roka
  • Či už alebo nie letné úspory je aktívny

Ak sa teda vrátime k príkladu a pokúsime sa ho prečítať, uvidíte, že 27. decembra 2005 je 8:36:20, sú to 2 dni po nedeľu (utorok) a 360 dní od začiatku ročne. Letný čas nie je aktívny.

Prispôsobenie čitateľnosti miestneho času Perlu

Niekoľko prvkov v poli, ktoré sa vracia v miestnom čase, je trochu nepríjemné na čítanie. Kto by si myslel na aktuálny rok z hľadiska počtu rokov okolo roku 1900? Pozrime sa na príklad, ktorý objasňuje náš dátum a čas.

 #! / Usr / local / bin / perl

 @months = qw (január február marec máj jún jún júl jún september september november);

 @weekDays = qw (nedeľa pon. Ut. Št. Pi. So.);

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

 $ year = 1900 + $ yearOffset;

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

 print $ theTime; 

Pri spustení programu by ste mali vidieť omnoho čitateľnejší dátum a čas, ako je tento:

 9:14:42, streda 28. decembra 2005 

Čo sme urobili, aby sme vytvorili túto čitateľnejšiu verziu? Najprv pripravíme dve polia s názvami mesiacov a dní v týždni.

 @months = qw (január február marec máj jún jún júl jún september september november);

 @weekDays = qw (nedeľa pon. Ut. Št. Pi. So.); 

Pretože funkcia localtime vracia tieto prvky v hodnotách od 0 do 11 a 0 až 6, ide o perfektných kandidátov na pole. Hodnota vrátená miestnym časom sa môže použiť ako numerická adresa na prístup k správnemu prvku v poli.

 $ mesiace [$ mesiac] $ weekDays [$ dayOfWeek]


Ďalším krokom je získať všetky hodnoty z funkcie miestneho času. V tomto príklade používame klávesovú skratku Perl na automatické umiestnenie každého prvku v poli miestneho času do jeho vlastnej premennej. Vybrali sme si mená, aby bolo ľahké zapamätať si, ktorý prvok je ktorý.

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


Musíme tiež upraviť hodnotu roka. Nezabudnite, že miestny čas vracia počet rokov od roku 1900, aby sme našli aktuálny rok, musíme k hodnote, ktorú dostaneme, pridať 1900.

 $ year = 1900 + $ yearOffset;

Ako zistiť aktuálny GM čas v Perl

Povedzme, že sa chcete vyhnúť všetkým možným zmätkom v časovom pásme a sami prevziať kontrolu nad ofsetom. Získanie aktuálneho času v miestnom čase vždy vráti hodnotu, ktorá je založená na nastavení časovej zóny stroja - server v USA sa vrátia raz, zatiaľ čo server v Austrálii sa vráti jeden takmer celý deň iný v dôsledku časového pásma rozdiely.

Perl má druhú praktickú funkciu na určovanie času, ktorá funguje presne rovnakým spôsobom ako miestny čas, ale namiesto vrátenia času stanoveného pre vaše zariadenie časové pásmo, vráti sa Koordinovaný univerzálny čas (skrátene UTC, tiež nazývaný Greenwichský stredný čas alebo GMT). Jednoducho sa funkcia volá gmtime.

 #! / Usr / local / bin / perl

 @timeData = gmtime (time);

 print join ('', @timeData); 

Okrem skutočnosti, že vrátený čas bude rovnaký na každom počítači a v GMT, nie je rozdiel medzi funkciami gmtime a localtime. Všetky údaje a konverzie sa uskutočňujú rovnakým spôsobom.

 #! / Usr / local / bin / perl

 @months = qw (január február marec máj jún jún júl jún september september november);

 @weekDays = qw (nedeľa pon. Ut. Št. Pi. So.);

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

 $ year = 1900 + $ yearOffset;

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

 print $ theGMTime; 

  1. localtime vráti aktuálny miestny čas na počítači, ktorý spúšťa skript.
  2. gmtime vráti univerzálny greenwichský stredný čas alebo GMT (alebo UTC).
  3. Návratové hodnoty nemusia byť úplne také, ako očakávate, takže ich podľa potreby skonvertujte.