Lokaltid: Hvordan fortelle den nåværende tiden i Perl

click fraud protection

Perl har en praktisk innebygd funksjon for å finne gjeldende dato og klokkeslett i skriptene dine. Når vi snakker om å finne tiden, snakker vi imidlertid om tiden som er satt på maskinen som kjører skriptet. Hvis du for eksempel kjører Perl-skriptet på din lokale maskin, vil lokal tid returnere gjeldende tid du har angitt, og antagelig angitt til gjeldende tidssone.

Når du kjører det samme skriptet på en webserver, kan det hende at lokal tid der er slått av fra lokaltid på skrivebordssystemet. Serveren kan være i en annen tidssone eller være feil innstilt. Hver maskin kan ha en helt annen ide om hva lokal tid er, og det kan ta litt justering, enten i skriptet eller på selve serveren, for å få den til å samsvare med det du forventer.

Lokaltidsfunksjonen returnerer en liste full av data om gjeldende tid, hvorav noen må justeres. Kjør programmet nedenfor, så ser du hvert element i listen trykt på linjen og atskilt med mellomrom.

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

Du bør se noe som ligner på dette, selv om antallet kan være veldig forskjellig.

20 36 8 27 11 105 2 360 0

Disse elementene i tiden er i rekkefølge:

  • Sekunder forbi minuttet
  • Minutter over timen
  • Timer etter midnatt
  • Månedens dag
  • Måneder etter starten av året
  • Antall år siden 1900
  • Antall dager siden ukens start (søndag)
  • Antall dager siden starten av året
  • Hvorvidt sommertid er aktiv

Så hvis vi går tilbake til eksemplet og prøver å lese det, vil du se at det er 08:36:20 AM 27. desember 2005, det er 2 dager etter søndag (tirsdag), og det er 360 dager siden starten av år. Sommertid er ikke aktiv.

Gjør Perl lokal tid lesbar

Noen få av elementene i rekken som lokal tid returnerer er litt vanskelig å lese. Hvem vil tenke på inneværende år med tanke på antall år siste 1900? La oss se på et eksempel som gjør datoen og klokkeslettet vårt tydeligere.

 #! / Usr / local / bin / perl

 @months = qw (jan feb mar apr mai juni jul aug sep okt nov des);

 @weekDays = qw (sø man man on to fre lør søn);

 ($ sekund, $ minutt, $ time, $ dayOfMonth, $ måned, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = lokaltid ();

 $ år = 1900 + $ årOffset;

 $ theTime = "$ time: $ minutt: $ sekund, $ ukeDager [$ dayOfWeek] $ måneder [$ måned] $ dayOfMonth, $ year";

 skriv ut $ theTime; 

Når du kjører programmet, bør du se en mye mer lesbar dato og tid som dette:

 9:14:42, onsdag 28. desember 2005 

Så hva gjorde vi for å lage denne mer leselige versjonen? Først forbereder vi to matriser med navnene på månedene og dagene i uken.

 @months = qw (jan feb mar apr mai juni jul aug sep okt nov des);

 @weekDays = qw (sø man man on to fre lør søn); 

Siden localtime-funksjonen returnerer disse elementene i verdier fra henholdsvis 0-11 og 0-6, er de perfekte kandidater for en matrise. Verdien som returneres ved lokal tid kan brukes som en numerisk adresse for å få tilgang til riktig element i matrisen.

 $ måneder [$ måned] $ ukeDager [$ dayOfWeek]


Neste trinn er å hente alle verdiene fra lokalfunksjonen. I dette eksemplet bruker vi en snarvei til Perl for automatisk å plassere hvert element i lokaloppstillingen i sin egen variabel. Vi har valgt navn slik at det er lett å huske hvilket element som er hvilket.

 ($ sekund, $ minutt, $ time, $ dayOfMonth, $ måned, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = lokaltid ();


Vi må også justere årets verdi. Husk at lokal tid returnerer antall år siden 1900, så for å finne inneværende år, må vi legge 1900 til verdien vi får.

 $ år = 1900 + $ årOffset;

Hvordan fortelle den nåværende GM-tiden i Perl

La oss si at du vil unngå alle mulige forvekslinger av tidssoner og selv ta kontroll over forskyvningen. Å få gjeldende tid i lokal tid vil alltid returnere en verdi som er basert på maskinens tidssoneinnstillinger - en server i USA vil returnere en gang, mens en server i Australia vil returnere en nesten en hel dag annerledes på grunn av tidssonen forskjeller.

Perl har en annen praktisk tidfortellingsfunksjon som fungerer på nøyaktig samme måte som lokal tid, men i stedet for å returnere tiden som er fast for maskinens tidssone, det kommer tilbake Koordinert universell tid (forkortet UTC, også kalt Greenwich Mean Time eller GMT). Enkelt nok heter funksjonen gmtime.

 #! / Usr / local / bin / perl

 @timeData = gmtime (tid);

 print join ('', @timeData); 

Bortsett fra at den returnerte tiden vil være den samme på hver maskin, og i GMT, er det ingen forskjell mellom gmtime og localtime-funksjonene. Alle dataene og konverteringene gjøres på samme måte.

 #! / Usr / local / bin / perl

 @months = qw (jan feb mar apr mai juni jul aug sep okt nov des);

 @weekDays = qw (sø man man on to fre lør søn);

 ($ sekund, $ minutt, $ time, $ dayOfMonth, $ måned, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ år = 1900 + $ årOffset;

 $ theGMTime = "$ time: $ minutt: $ sekund, $ ukeDager [$ dayOfWeek] $ måneder [$ month] $ dayOfMonth, $ year";

 skriv ut $ theGMTime; 

  1. lokal tid vil returnere gjeldende lokal tid på maskinen som kjører skriptet.
  2. gmtime returnerer universal Greenwich Mean Time, eller GMT (eller UTC).
  3. Avkastningsverdiene er kanskje ikke helt det du forventer, så pass på at du konverterer dem etter behov.
instagram story viewer