Localtime: Hogyan lehet megmondani az aktuális időt Perl-ben?

click fraud protection

Perl praktikus beépített funkcióval rendelkezik az aktuális dátum és idő megtalálásához a szkriptekben. Amikor azonban az idő megtalálásáról beszélünk, akkor arról az időről beszélünk, amelyet a szkriptet futtató gépen jelenleg beállítunk. Például, ha a Perl szkriptet a helyi gépen futtatja, a localtime visszatér a beállított aktuális időhöz, és feltehetően a jelenlegi időzónához állítja be.

Amikor ugyanazt a szkriptet futtatja egy webszerveren, előfordulhat, hogy a helyi idő nem elérhető az asztali rendszeren. Lehet, hogy a szerver más időzónában van, vagy hibásan van beállítva. Lehet, hogy minden gépnek teljesen más elképzelése van arról, hogy mi a lokálidő, és a szkriptben vagy a szerveren maga is szükséges, hogy bizonyos kiigazításokat végezzen, hogy megfeleljen a vártnak.

A helyi idő függvényében teljes lista jelenik meg az aktuális időről, amelyek közül néhányat módosítani kell. Futtassa az alábbi programot, és a listában minden elem megjelenik a sorra nyomtatva, szóközzel elválasztva.

instagram viewer
#! / Usr / local / bin / perl
@timeData = helyi idő (idő);
print join ('', @timeData);

Látnia kellene ehhez hasonlót, bár a szám nagyon eltérő lehet.

20 36 8 27 11 105 2 360 0

A jelen idő ezen elemei a következő sorrendben vannak:

  • Másodperc múlva
  • Percek az óra múlásával
  • Órák éjfél után
  • A hónap napja
  • Az év elején eltelt hónapok
  • Az évek száma 1900 óta
  • A hét kezdete óta eltelt napok száma (vasárnap)
  • Az év kezdete óta eltelt napok száma
  • Függetlenül attól, hogy nyári időszámítás aktív

Tehát ha visszatérünk a példához, és megkíséreljük elolvasni, látni fogjuk, hogy 2005. december 27-én, 8:36:20, 2 nappal van vasárnap (kedden), és 360 nap van a év. A nyári időszámítás nem aktív.

A Perl Localtime olvashatóvá tétele

A tömb azon elemeinek néhány, amelyeket a lokálidő visszaad, kissé kínos olvasni. Ki gondolná a folyó évet az 1900 elmúlt évek száma alapján? Vessen egy pillantást egy példára, amely világosabbá teszi a dátumot és az időt.

 #! / Usr / local / bin / perl

 @months = qw (január febr. márc. ápr. május ápr. május június aug. szeptember okt. okt. okt. dec.);

 @weekDays = qw (vasárnap hétfő kedd péntek péntek vasárnap);

 ($ második, $ perc, $ óra, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();

 $ év = 1900 + $ yearOffset;

 $ theTime = "$ óra: $ perc: $ második, $ weekDays [$ dayOfWeek] $ hónap [$ hónap] $ dayOfMonth, $ év";

 print the theime; 

A program futtatásakor sokkal olvashatóbb dátumot és időt kell látnia, mint például:

 9:14:42, 2005. december 28., kedd 

Szóval mit tettünk ennek az olvashatóbb verziónak a létrehozására? Először két tömböt készítünk, amelyekben a hónapok és a hét napjai szerepelnek.

 @months = qw (január febr. márc. ápr. május ápr. május június aug. szeptember okt. okt. okt. dec.);

 @weekDays = qw (vasárnap hétfő kedd péntek péntek vasárnap); 

Mivel a localtime függvény ezeket az elemeket 0–11 és 0–6 közötti értékben adja vissza, tökéletesek jelölések. A helyi idő által visszaadott érték numerikus címként használható a tömb megfelelő elemének eléréséhez.

 $ hónap [$ hónap] $ hét Napok [$ dayOfWeek]


A következő lépés az összes érték beolvasása a helyi idő függvényéből. Ebben a példában Perl parancsikont használunk, hogy az egyes elemeket a lokálidő-tömbbe automatikusan a saját változójába helyezzük. A neveket úgy választottuk, hogy könnyen megjegyezzük, melyik elem melyik.

 ($ második, $ perc, $ óra, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();


Az év értékét is módosítanunk kell. Ne feledje, hogy a lokálidő az 1900 óta eltelt évek számát adja vissza, tehát a folyó év megtalálásához 1900-at kell hozzáadnunk az általunk megadott értékhez.

 $ év = 1900 + $ yearOffset;

Hogyan lehet megmondani a Perl-i GM időt?

Tegyük fel, hogy el akarja kerülni az esetleges időzónás zavarokat, és maga kezeli az eltolást. Ha az aktuális időt helyi idő szerint kapja meg, akkor mindig olyan értéket ad vissza, amely a gép időzónájának beállításain alapul - egy kiszolgálón az Egyesült Államok egy alkalommal tér vissza, míg az ausztráliai szerver egy majdnem egy teljes napot tér vissza az időzóna miatt különbségek.

A Perlnek van egy másodlagos, időmérő funkciója, amely pontosan ugyanúgy működik, mint a lokálidő, de ahelyett, hogy visszaadná a gépéhez rögzített időt időzóna, visszatér Koordinált világidő (rövidítve UTC, más néven Greenwich Mean Time vagy GMT). Egyszerűen elég, hogy a függvényt meghívják gmtime.

 #! / Usr / local / bin / perl

 @timeData = gmtime (idő);

 print join ('', @timeData); 

Azon kívül, hogy a visszatérési idő minden gépen azonos lesz, és a GMT-ben, nincs különbség a gmtime és a localtime függvények között. Az összes adat és a konvertálás ugyanúgy történik.

 #! / Usr / local / bin / perl

 @months = qw (január febr. márc. ápr. május ápr. május június aug. szeptember okt. okt. okt. dec.);

 @weekDays = qw (vasárnap hétfő kedd péntek péntek vasárnap);

 ($ második, $ perc, $ óra, $ dayOfMonth, $ hónap, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ év = 1900 + $ yearOffset;

 $ theGMTime = "$ óra: $ perc: $ második, $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth, $ year";

 print $ theGMTime; 

  1. A localtime visszaadja az aktuális helyi időt a szkriptet futtató gépen.
  2. A gmtime visszatér az egyetemes Greenwichi középidőhöz vagy GMT-hez (vagy UTC-hez).
  3. Lehet, hogy a visszatérési értékek nem olyanok, amire számítasz, ezért feltétlenül konvertálja át őket, ha szükséges.
instagram story viewer