Perls ir ērta iebūvēta funkcija pašreizējā datuma un laika atrašanai skriptos. Tomēr, runājot par laika atrašanu, mēs runājam par laiku, kas pašlaik ir iestatīts mašīnā, kurā darbojas skripts. Piemēram, ja palaižat Perl skriptu vietējā mašīnā, vietējais laiks atgriezīs jūsu iestatīto pašreizējo laiku un, domājams, iestatītu uz jūsu pašreizējo laika joslu.
Palaižot to pašu skriptu tīmekļa serverī, iespējams, ka darbvirsmas sistēmā lokalizācijas laiks ir izslēgts no lokalizācijas laika. Iespējams, serveris atrodas citā laika joslā vai ir iestatīts nepareizi. Katrai mašīnai var būt pilnīgi atšķirīgs priekšstats par lokalizācijas laiku, un tas var prasīt zināmu pielāgošanu vai nu skriptā, vai pašā serverī, lai tā atbilstu gaidītajam.
Vietas laika funkcija atgriež sarakstu ar pilnu datu daudzumu par pašreizējo laiku, un daži no tiem būs jāpielāgo. Palaidiet zemāk esošo programmu, un jūs redzēsit katru saraksta elementu, kas izdrukāts uz līnijas un atdalīts ar atstarpēm.
#! / usr / local / bin / perl
@timeData = vietējais laiks (laiks);
print join ('', @timeData);
Jums vajadzētu redzēt kaut ko līdzīgu šim, kaut arī to skaits varētu būt ļoti atšķirīgs.
20 36 8 27 11 105 2 360 0
Šie pašreizējā laika elementi ir secīgi:
- Sekundi pēc minūtes
- Minūtes garām stundai
- Stundas pēc pusnakts
- Mēneša diena
- Mēneši pagājuši gada sākumā
- Gadu skaits kopš 1900. gada
- Dienu skaits kopš nedēļas sākuma (svētdiena)
- Dienu skaits kopš gada sākuma
- Neatkarīgi no tā vasaras laika ietaupījums ir aktīvs
Tātad, ja atgriezīsimies pie piemēra un mēģināsim to izlasīt, redzēsit, ka 2005. gada 27. decembrī pulksten 8:36:20 ir pagājušas 2 dienas svētdien (otrdien) un ir 360 dienas kopš gadā. Vasaras laiks nav aktīvs.
Padarot Perl Localtime lasāmu
Daži no masīva elementiem, kurus atgriež vietējais laiks, ir mazliet neērti lasīt. Kas domātu par kārtējo gadu, ņemot vērā gadu skaitu pagātnē 1900? Apskatīsim piemēru, kas mūsu datumu un laiku padara skaidrāku.
#! / usr / local / bin / perl
@months = qw (Jan Feb Mar Mar Apr Maijs Jun Jul Aug Aug Sep Oct Nov Dec);
@weekDays = qw (svētdien pirmdien, otrdien, piektdienā, svētdien);
($ otrais, $ minūte, $ stunda, $ dayOfMonth, $ mēnesis, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();
$ gads = 1900 + $ yearOffset;
$ theTime = "$ stunda: $ minūte: $ otrais, $ weekDays [$ dayOfWeek] $ mēneši [$ mēnesis] $ dayOfMonth, $ gads";
print $ theTime;
Palaižot programmu, jums vajadzētu redzēt daudz lasāmāku datumu un laiku, piemēram:
9:14:42, trešdien, 2005. gada 28. decembrī
Ko mēs darījām, lai izveidotu šo lasāmāku versiju? Vispirms mēs sagatavojam divus masīvus ar mēnešu un nedēļas dienu nosaukumiem.
@months = qw (Jan Feb Mar Mar Apr Maijs Jun Jul Aug Aug Sep Oct Nov Dec);
@weekDays = qw (svētdien pirmdien, otrdien, piektdienā, svētdien);
Tā kā lokaltāja funkcija atgriež šos elementus vērtībās attiecīgi no 0-11 un 0-6, tie ir lieliski masīva kandidāti. Lokālā laika atgriezto vērtību var izmantot kā ciparu adresi, lai piekļūtu masīva pareizajam elementam.
$ mēneši [$ mēnesis] $ nedēļaDienas [$ dayOfWeek]
Nākamais solis ir visu vērtību iegūšana no lokaltāža funkcijas. Šajā piemērā mēs izmantojam Perl saīsni, lai automātiski lokalizācijas laika masīvā katru elementu ievietotu savā mainīgajā. Mēs esam izvēlējušies nosaukumus, lai būtu viegli atcerēties, kurš elements ir kurš.
($ otrais, $ minūte, $ stunda, $ dayOfMonth, $ mēnesis, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();
Mums arī jāpielāgo gada vērtība. Atcerieties, ka vietējais laiks atgriež gadu skaitu kopš 1900. gada, tāpēc, lai atrastu kārtējo gadu, mums piešķirtajai vērtībai būs jāpievieno 1900.
$ gads = 1900 + $ yearOffset;
Kā noteikt pašreizējo GM laiku Perlā?
Teiksim, ka vēlaties izvairīties no iespējamām sajaukšanām laika joslās un pats kontrolēt nobīdi. Iegūstot pašreizējo laiku lokalizācijā, vienmēr tiks atgriezta vērtība, kas balstīta uz mašīnas laika joslas iestatījumiem - serveri ASV atgriezīsies vienu reizi, bet serveris Austrālijā atgriezīsies vienu gandrīz pilnu dienu, kas atšķiras laika joslas dēļ atšķirības.
Perlam ir otra ērta laika noteikšanas funkcija, kas darbojas tieši tādā pašā veidā kā lokalizācija, bet tā vietā, lai atgrieztos jūsu mašīnai noteikto laiku. laika zona, tas atgriežas Koordinētais universālais laiks (saīsināts kā UTC, saukts arī par Griničas laiku vai GMT). Pietiek ar to, ka funkcija tiek izsaukta gmtime.
#! / usr / local / bin / perl
@timeData = gmtime (laiks);
print join ('', @timeData);
Izņemot to, ka atgriešanās laiks būs vienāds katrā mašīnā un GMT, starp gmtime un localtime funkcijām nav atšķirības. Visi dati un reklāmguvumi tiek veikti vienādi.
#! / usr / local / bin / perl
@months = qw (Jan Feb Mar Mar Apr Maijs Jun Jul Aug Aug Sep Oct Nov Dec);
@weekDays = qw (svētdien pirmdien, otrdien, piektdienā, svētdien);
($ otra, $ minūte, $ stunda, $ dayOfMonth, $ mēnesis, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();
$ gads = 1900 + $ yearOffset;
$ theGMTime = "$ stunda: $ minūte: $ sekundes, $ weekDays [$ dayOfWeek] $ mēneši [$ mēnesis] $ dayOfMonth, $ gads";
print $ theGMTime;
- localtime atgriezīs pašreizējo vietējo laiku mašīnā, kurā tiek palaists skripts.
- gmtime atgriezīs universālo Griničas laiku jeb GMT (vai UTC).
- Atgriešanās vērtības var nebūt gluži tādas, kādas jūs sagaidāt, tāpēc pārliecinieties, ka konvertējat tās pēc nepieciešamības.