Locul locului: Cum să spuneți ora curentă în Perl

Perl are o funcție integrată utilă pentru a găsi data și ora curente în scripturile dvs. Cu toate acestea, atunci când vorbim despre găsirea timpului, vorbim despre ora care este setată în prezent pe mașina care rulează scriptul. De exemplu, dacă executați scriptul dvs. Perl pe mașina dvs. locală, ora locală va întoarce ora actuală setată și, probabil, setată la fusul orar curent.

Când rulați același script pe un server web, puteți găsi că localtime este oprit de la localtime pe sistemul desktop. Serverul ar putea fi într-un alt fus orar sau setat incorect. Fiecare mașină poate avea o idee total diferită despre ceea ce este localtime și poate fi nevoie de unele ajustări, fie în script sau pe serverul în sine, pentru ca acesta să se potrivească la ceea ce vă așteptați.

Funcția localtime returnează o listă plină de date despre ora curentă, dintre care unele vor trebui ajustate. Rulați programul de mai jos și veți vedea fiecare element din listă tipărit pe linie și separat de spații.

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

Ar trebui să vezi ceva similar cu acesta, deși numărul ar putea fi foarte diferit.

20 36 8 27 11 105 2 360 0

Aceste elemente ale timpului curent sunt, în ordine:

  • Secunde trecut de minut
  • Minute peste ora
  • Ore trecute miezul nopții
  • Ziua lunii
  • Lunile trecute de începutul anului
  • Număr de ani de la 1900
  • Număr de zile de la începutul săptămânii (duminică)
  • Număr de zile de la începutul anului
  • Indiferent dacă nu ora de vară este activ

Deci, dacă revenim la exemplul și încercăm să-l citim, veți vedea că este 27:36:20 pe 27 decembrie 2005, sunt 2 zile trecute duminică (marți) și sunt 360 de zile de la începutul an. Ora de vară nu este activă.

Crearea lizibilă a locului Perl

Câteva dintre elementele din tabloul pe care le returnează locala sunt puțin incomode de citit. Cine s-ar gândi la anul curent în ceea ce privește numărul de ani trecut 1900? Haideți să aruncăm o privire la un exemplu care ne clarifică data și ora.

 #! / Usr / local / bin / perl

 @months = qw (Jan Feb Mar Apr Mai Iun Jul Iul Sep Sep Oct Dec);

 @weekDays = qw (Duminică, Luni, Miercuri, Joi Vineri Sâmbătă);

 (secundă $, minut $, oră $, zi zi $ OfMontă, lună $, $ anOfset, $ ziOfimă, $ ziOfYear, $ zi de luminăSavings) = localtime ();

 $ an = 1900 + $ anAffset;

 $ theTime = "$ ora: $ minut: $ secundă, $ săptămână $ Zile [$ ziOfWeek] $ luni [$ lună] $ ziOfMontă, an $";

 imprima $ theTime; 

Când rulați programul, ar trebui să vedeți o dată și o oră mult mai lizibile ca aceasta:

 9:14:42, 28 decembrie 2005 

Deci, ce am făcut pentru a crea această versiune mai lizibilă? În primul rând, pregătim două tablouri cu numele lunilor și zilelor săptămânii.

 @months = qw (Jan Feb Mar Apr Mai Iun Jul Iul Sep Sep Oct Dec);

 @weekDays = qw (Duminică, Luni, Miercuri, Joi Vineri Sâmbătă); 

Deoarece funcția localtime returnează aceste elemente în valori cuprinse între 0-11 și respectiv 0-6, aceștia sunt candidați perfecti pentru un tablou. Valoarea returnată de localtime poate fi utilizată ca adresă numerică pentru a accesa elementul corect din tablă.

 $ luni [$ lună] $ săptămână Zilele [ziua ziOfWeek]


Următorul pas este să obțineți toate valorile din funcția localtime. În acest exemplu, utilizăm o comandă rapidă Perl pentru a plasa automat fiecare element din matricea locală în propria sa variabilă. Am ales nume astfel încât să fie ușor să ne amintim care element este.

 (secundă $, minut $, oră $, zi zi $ OfMontă, lună $, $ anOfset, $ ziOfimă, $ ziOfYear, $ zi de luminăSavings) = localtime ();


De asemenea, trebuie să reglăm valoarea anului. Amintiți-vă că localtime returnează numărul de ani începând cu 1900, așa că pentru a găsi anul curent, va trebui să adăugăm 1900 la valoarea care ne este dată.

 $ an = 1900 + $ anAffset;

Cum se spune ora GM actuală în Perl

Să spunem că doriți să evitați toate confuziile posibile de fus orar și să preluați singur compensarea. Obținerea orei curente la ora locală va întoarce întotdeauna o valoare care se bazează pe setările fusului orar al mașinii - un server din SUA vor reveni o singură dată, în timp ce un server din Australia va întoarce o zi aproape diferită, din cauza fusului orar diferențe.

Perl are o a doua funcție de indicare a timpului care funcționează exact în același mod ca ora locala, dar în loc să returneze timpul stabilit pentru mașina dvs. fus orar, se întoarce ora universală coordonată (prescurtată ca UTC, numită și Greenwich Mean Time sau GMT). Pur și simplu, funcția este numită gmtime.

 #! / Usr / local / bin / perl

 @timeData = gmtime (timp);

 print join ('', @timeData); 

În afară de faptul că timpul returnat va fi același pe fiecare mașină și în GMT, nu există nicio diferență între funcțiile gmtime și localtime. Toate datele și conversiile se fac în același mod.

 #! / Usr / local / bin / perl

 @months = qw (Jan Feb Mar Apr Mai Iun Jul Iul Sep Sep Oct Dec);

 @weekDays = qw (Duminică, Luni, Miercuri, Joi Vineri Sâmbătă);

 (secundă $, minut $, oră $, zi ziOfMontă, lună $, an $ $ Ofertă, $ ziOfimă, $ ziOfYear, $ zi de luminăSavings) = gmtime ();

 $ an = 1900 + $ anAffset;

 $ theGMTime = "$ oră: $ minut: $ secundă, $ săptămână, săptămâni $ [zi ziOfWeek] $ luni [$ lună] $ ziOfMontă, an $";

 imprima $ theGMTime; 

  1. localtime va returna ora locală curentă pe mașina care rulează scriptul.
  2. gmtime va returna timpul mediu universal de la Greenwich, sau GMT (sau UTC).
  3. Este posibil ca valorile de returnare să nu fie exact ceea ce vă așteptați, așa că asigurați-vă că le convertiți după cum este necesar.