Lokalni čas: Kako povedati trenutni čas v Perlu

Perl ima priročno vgrajeno funkcijo za iskanje trenutnega datuma in časa v vaših skriptah. Ko pa govorimo o iskanju časa, govorimo o času, ki je trenutno nastavljen na napravi, ki poganja skript. Na primer, če na domačem računalniku izvajate skript Perl, lokalno vreme vrne trenutni čas, ki ste ga določili, in predvidoma nastavljeno na vaš trenutni časovni pas.

Ko isti spletni skript zaženete na spletnem strežniku, boste morda ugotovili, da je lokalno vreme v namiznem sistemu izključeno od localtime. Strežnik je morda v drugem časovnem pasu ali je napačno nastavljen. Vsak stroj ima popolnoma drugačno predstavo o tem, kaj je lokalno vreme, in morda bo potrebno prilagajanje, bodisi znotraj skripta bodisi na samem strežniku, da se bo ujemalo s tem, kar pričakujete.

Funkcija localtime vrne seznam polnih podatkov o trenutnem času, nekatere pa je treba prilagoditi. Zaženite spodnji program in vsak element boste videli na seznamu, natisnjenem v vrstici in ločeni s presledki.

#! / usr / local / bin / perl
@timeData = localtime (čas);
tiskanje pridruži ('', @timeData);
instagram viewer

Pri tem bi morali videti nekaj podobnega, čeprav bi se številka lahko zelo razlikovala.

20 36 8 27 11 105 2 360 0

Ti elementi trenutnega časa so:

  • Sekunde mimo minute
  • Minut mimo ure
  • Ure mimo polnoči
  • Dan v mesecu
  • Meseci mimo začetka leta
  • Število let od leta 1900
  • Število dni od začetka tedna (nedelja)
  • Število dni od začetka leta
  • Ne glede na to ali ne varčevanje z dnevno svetlobo je aktiven

Če se vrnemo k primeru in ga poskusimo prebrati, boste videli, da je 27. decembra 2005 ob 8:36:20 minilo 2 dni v nedeljo (torek) in je minilo 360 dni od začetka leto. Poletni čas ni aktiven.

Izdelava berljivega lokalnega časa Perl

Nekaj ​​elementov v matriki, ki se vrača v lokalni čas, je nekoliko nerodno prebrati. Kdo bi pomislil na tekoče leto glede na število preteklih let 1900? Oglejmo si primer, zaradi katerega sta naš datum in čas bolj jasna.

 #! / usr / local / bin / perl

 @months = qw (jan. februar. mar. apr. maj. jul. avgust. september. oktober. dec.);

 @weekDays = qw (ned. pon. četr. petek čet petek ned);

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

 $ year = 1900 + $ yearOffset;

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

 natisnite $ theTime; 

Ko zaženete program, bi morali videti veliko bolj berljiv datum in čas, kot je ta:

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

Kaj smo torej naredili, da smo ustvarili to bolj berljivo različico? Najprej pripravimo dva niza z imeni mesecev in dni v tednu.

 @months = qw (jan. februar. mar. apr. maj. jul. avgust. september. oktober. dec.);

 @weekDays = qw (ned. pon. četr. petek čet petek ned); 

Ker funkcija localtime vrne te elemente v vrednostih od 0-11 oziroma 0-6, so popolni kandidati za niz. Vrednost, ki jo vrne localtime, se lahko uporabi kot številčni naslov za dostop do pravilnega elementa v matriki.

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


Naslednji korak je pridobitev vseh vrednosti iz funkcije localtime. V tem primeru uporabljamo bližnjico Perl, da samodejno postavimo vsak element v lokalni časovni niz v svojo spremenljivko. Imena smo izbrali tako, da si je enostavno zapomniti, kateri element je.

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


Prav tako moramo prilagoditi vrednost leta. Ne pozabite, da localtime vrača število let od leta 1900, zato bomo za iskanje tekočega leta morali dodati vrednost 1900, ki nam je dana.

 $ year = 1900 + $ yearOffset;

Kako povedati trenutni čas GM v Perlu

Recimo, da se želite izogniti vsem možnim nejasnostim v časovnem pasu in sami prevzeti nadzor nad nadomestitvijo. Pridobivanje trenutnega časa v lokalnem času bo vedno vrnilo vrednost, ki temelji na nastavitvah časovnega pasu naprave - v strežniku ZDA se bodo vrnile enkrat, medtem ko strežnik v Avstraliji vrne en skoraj cel dan, drugačen zaradi časovnega pasu razlike.

Perl ima drugo priročno funkcijo za prikazovanje časa, ki deluje povsem na enak način kot lokalno, vendar namesto da vrne čas, določen za vašo napravo časovni pas, se vrne Usklajeni univerzalni čas (okrajšano kot UTC, imenovano tudi Greenwich srednji čas ali GMT). Preprosto dovolj se imenuje funkcija gmtime.

 #! / usr / local / bin / perl

 @timeData = gmtime (čas);

 tiskanje pridruži ('', @timeData); 

Razen dejstva, da bo vrnjeni čas enak na vsakem stroju in v GMT-ju ni razlike med funkcijama gmtime in localtime. Vsi podatki in pretvorbe se izvajajo na enak način.

 #! / usr / local / bin / perl

 @months = qw (jan. februar. mar. apr. maj. jul. avgust. september. oktober. dec.);

 @weekDays = qw (ned. pon. četr. petek čet petek ned);

 ($ druga, $ minuta, $ ura, $ dayOfMonth, $ mesec, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ year = 1900 + $ yearOffset;

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

 natisnite $ theGMTime; 

  1. localtime bo vrnil trenutni lokalni čas na stroj, ki poganja skript.
  2. gmtime bo vrnil univerzalni Greenwich srednji čas ali GMT (ali UTC).
  3. Povratne vrednosti morda niso ravno tisto, kar pričakujete, zato se prepričajte, da jih pretvorite po potrebi.
instagram story viewer