Vietos laikas: Kaip sužinoti dabartinį laiką Perle

Perlas turi patogią integruotą funkciją, leidžiančią rasti dabartinę datą ir laiką jūsų scenarijuose. Tačiau kai mes kalbame apie laiko radimą, mes kalbame apie laiką, kuris šiuo metu yra nustatytas mašinoje, kurioje vykdomas scenarijus. Pvz., Jei vykdote „Perl“ scenarijų vietiniame kompiuteryje, vietinis laikas grąžins jūsų nustatytą dabartinį laiką ir, tikėtina, nustatytą į dabartinę laiko juostą.

Vykdydami tą patį scenarijų žiniatinklio serveryje, galite pastebėti, kad vietinis laikas jūsų darbalaukio sistemoje yra išjungtas. Gali būti, kad serveris yra kitoje laiko juostoje arba neteisingai nustatytas. Kiekvienas kompiuteris gali turėti visiškai skirtingą idėją, koks yra lokalės laikas, ir prireiks šiek tiek pakoreguoti scenarijų arba pačiame serveryje, kad jis atitiktų tai, ko tikitės.

Vietos laiko funkcija pateikia sąrašą duomenų, susijusių su dabartiniu laiku, ir kai kuriuos iš jų turėsite pakoreguoti. Vykdykite žemiau esančią programą ir pamatysite kiekvieną sąrašo elementą, atspausdintą ant linijos ir atskirtą tarpais.

instagram viewer
#! / usr / vietinis / bin / perl
@timeData = vietinis laikas (laikas);
spausdinti prisijungti ('', @timeData);

Turėtumėte pamatyti kažką panašaus į tai, nors skaičius gali būti labai skirtingas.

20 36 8 27 11 105 2 360 0

Šie dabartinio laiko elementai yra išdėstyti tokia tvarka:

  • Sekundės per minutę
  • Minutės praėjo valanda
  • Valandos po vidurnakčio
  • Mėnesio diena
  • Mėnesiai, praėję metų pradžioje
  • Metų skaičius nuo 1900 m
  • Dienų skaičius nuo savaitės pradžios (sekmadienis)
  • Dienų skaičius nuo metų pradžios
  • Kad ir kas benutiktų dienos šviesos taupymas yra aktyvus

Taigi, jei grįšime prie pavyzdžio ir pamėginsime jį perskaityti, pamatysite, kad 2005 m. Gruodžio 27 d., 8:36:20, praėjo 2 dienos per sekmadienį (antradienį), o 360 dienų nuo bandymo pradžios metų. Vasaros laikas nėra aktyvus.

Padaryti „Perl“ lokalime laiką skaitomą

Keletą elementų masyve, kuriuos grąžina vietinis laikas, yra šiek tiek nepatogu skaityti. Kas pagalvotų apie einamuosius metus, atsižvelgiant į praėjusių 1900 metų skaičių? Pažvelkime į pavyzdį, kuris paaiškina mūsų datą ir laiką.

 #! / usr / vietinis / bin / perl

 @months = qw (Jan Vas Vas Kov Bal Geguž Bir Bir Lie Lie Rup Rugs Spa Spa Lap Gru gruodis);

 @weekDays = qw (sekmadienis pirmadienis trečiadienis penktadienis sekmadienis sekmadienis);

 ($ sekundė, $ minutė, $ valanda, $ dayOfMonth, $ mėnuo, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = vietinis laikas ();

 $ metai = 1900 + $ yearOffset;

 $ theTime = "$ valanda: $ minutė: $ antra, $ weekDays [$ dayOfWeek] $ mėnesiai [$ mėnuo] $ dayOfMonth, $ metai“;

 spausdinti $ theTime; 

Vykdydami programą turėtumėte pamatyti daug lengviau skaitomą datą ir laiką:

 9:14:42, 2005 m. Gruodžio 28 d., Trečiadienis 

Taigi, ką mes padarėme kurdami šią labiau skaitomą versiją? Pirmiausia parengiame du masyvus su mėnesių ir savaitės dienų pavadinimais.

 @months = qw (Jan Vas Vas Kov Bal Geguž Bir Bir Lie Lie Rup Rugs Spa Spa Lap Gru gruodis);

 @weekDays = qw (sekmadienis pirmadienis trečiadienis penktadienis sekmadienis sekmadienis); 

Kadangi lokalinio laiko funkcija grąžina šiuos elementus atitinkamai 0–11 ir 0–6 vertėse, jie yra puikūs masyvo kandidatai. Vietos laiko grąžinta vertė gali būti naudojama kaip skaitmeninis adresas, norint pasiekti teisingą masyvo elementą.

 $ mėnuo [$ mėnuo] $ savaitėDienos [$ dayOfWeek]


Kitas žingsnis yra gauti visas reikšmes iš vietos nustatymo funkcijos. Šiame pavyzdyje mes naudojame „Perl“ nuorodą, kad kiekvienas elementas, esantis lokalinio laiko masyve, būtų automatiškai įdedamas į savo kintamąjį. Mes pasirinkome vardus, kad būtų lengva atsiminti, kuris elementas yra kuris.

 ($ sekundė, $ minutė, $ valanda, $ dayOfMonth, $ mėnuo, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = vietinis laikas ();


Taip pat turime pakoreguoti metų vertę. Atminkite, kad vietinis laikas grąžina metų skaičių nuo 1900 m., Todėl norėdami rasti einamuosius metus, turėsime pridėti 1900 prie mums suteiktos vertės.

 $ metai = 1900 + $ yearOffset;

Kaip sužinoti dabartinį GM laiką Perle

Tarkime, kad norite išvengti visų galimų laiko juostų painiojimų ir patys kontroliuoti ofsetą. Gavę dabartinį laiką vietiniu laiku, visada grįš vertė, pagrįsta mašinos laiko juostos nustatymais - serveriu JAV grįš vieną kartą, o serveris Australijoje grįš vieną beveik visą dieną, skirtą dėl laiko juostos skirtumai.

„Perl“ turi antrą patogią laiko nustatymo funkciją, kuri veikia lygiai taip pat, kaip ir vietinis laikas, bet užuot grąžinęs jūsų mašinos nustatytą laiką. laiko zona, jis grįžta Koordinuotas visuotinis laikas (sutrumpintai kaip UTC, dar vadinamas Grinvičo laiku arba GMT). Pakanka, kad funkcija vadinama gmtime.

 #! / usr / vietinis / bin / perl

 @timeData = gmtime (laikas);

 spausdinti prisijungti ('', @timeData); 

Išskyrus tai, kad grąžinamas laikas bus tas pats kiekvienoje mašinoje ir GMT, nėra skirtumo tarp „gmtime“ ir „localtime“ funkcijų. Visi duomenys ir konversijos atliekami tokiu pačiu būdu.

 #! / usr / vietinis / bin / perl

 @months = qw (Jan Vas Vas Kov Bal Geguž Bir Bir Lie Lie Rup Rugs Spa Spa Lap Gru gruodis);

 @weekDays = qw (sekmadienis pirmadienis trečiadienis penktadienis sekmadienis sekmadienis);

 ($ sekundė, $ minutė, $ valanda, $ dayOfMonth, $ mėnuo, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ metai = 1900 + $ yearOffset;

 $ theGMTime = "$ valanda: $ minutė: $ antra, $ weekDays [$ dayOfWeek] $ mėnesiai [$ mėnuo] $ dayOfMonth, $ metai“;

 spausdinti $ theGMTime; 

  1. „localtime“ grąžins dabartinį vietos laiką kompiuteryje, kuriame vykdomas scenarijus.
  2. „gmtime“ grįš universalusis Grinvičo laikas arba GMT (arba UTC).
  3. Grąžinimo vertės gali būti ne visai tokios, kokių tikitės, todėl įsitikinkite, kad prireikus jas konvertavote.
instagram story viewer