Perl - data i godzina

W tym rozdziale uzyskasz podstawowe informacje na temat przetwarzania i manipulowania datami i godzinami w Perlu.

Bieżąca data i godzina

Zacznijmy localtime()funkcja, która zwraca wartości dla bieżącej daty i godziny, jeśli nie podano żadnych argumentów. Poniżej znajduje się lista 9-elementowa zwrócona przezlocaltime funkcja podczas używania w kontekście listowym -

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Wypróbuj poniższy przykład, aby wydrukować różne elementy zwrócone przez funkcję localtime () -

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

Wykonanie powyższego kodu daje następujący wynik -

16 Feb Sat

Jeśli będziesz używać funkcji localtime () w kontekście skalarnym, zwróci ona datę i czas z bieżącej strefy czasowej ustawionej w systemie. Wypróbuj poniższy przykład, aby wydrukować bieżącą datę i godzinę w pełnym formacie -

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

Wykonanie powyższego kodu daje następujący wynik -

Local date and time Sat Feb 16 06:50:45 2013

Czas GMT

Funkcja gmtime()działa tak samo jak funkcja localtime (), ale zwracane wartości są zlokalizowane dla standardowej strefy czasowej Greenwich. Przy wywołaniu w kontekście listowym $ isdst, ostatnia wartość zwrócona przez gmtime, zawsze wynosi 0. W GMT nie ma czasu letniego.

Należy zwrócić uwagę na fakt, że localtime () zwróci bieżący czas lokalny na maszynie, na której działa skrypt, a funkcja gmtime () zwróci uniwersalny czas Greenwich Mean Time lub GMT (lub UTC).

Wypróbuj poniższy przykład, aby wydrukować bieżącą datę i godzinę, ale w skali GMT -

#!/usr/local/bin/perl

$datestring = gmtime();
print "GMT date and time $datestring\n";

Wykonanie powyższego kodu daje następujący wynik -

GMT date and time Sat Feb 16 13:50:45 2013

Formatuj datę i godzinę

Możesz użyć funkcji localtime (), aby uzyskać listę 9 elementów, a później możesz użyć printf() funkcja formatowania daty i godziny w oparciu o Twoje wymagania w następujący sposób -

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();

printf("Time Format - HH:MM:SS\n");
printf("%02d:%02d:%02d", $hour, $min, $sec);

Wykonanie powyższego kodu daje następujący wynik -

Time Format - HH:MM:SS
06:58:52

Czas epoki

Możesz użyć funkcji time (), aby uzyskać czas epoki, tj. Liczbę sekund, które upłynęły od określonej daty, w systemie Unix to 1 stycznia 1970.

#!/usr/local/bin/perl
 
$epoc = time();

print "Number of seconds since Jan 1, 1970 - $epoc\n";

Wykonanie powyższego kodu daje następujący wynik -

Number of seconds since Jan 1, 1970 - 1361022130

Możesz przekonwertować podaną liczbę sekund na ciąg daty i czasu w następujący sposób -

#!/usr/local/bin/perl

$datestring = localtime();
print "Current date and time $datestring\n";

$epoc = time();
$epoc = $epoc - 24 * 60 * 60;   # one day before of current date.

$datestring = localtime($epoc);
print "Yesterday's date and time $datestring\n";

Wykonanie powyższego kodu daje następujący wynik -

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

Funkcja POSIX strftime ()

Możesz użyć funkcji POSIX strftime()aby sformatować datę i godzinę za pomocą poniższej tabeli. Należy pamiętać, że specyfikatory oznaczone gwiazdką (*) zależą od ustawień regionalnych.

Specyficzny Zastąpiony przez Przykład
%a Skrócona nazwa dnia tygodnia * Thu
%A Pełna nazwa dnia tygodnia * Thursday
%b Skrócona nazwa miesiąca * Aug
%B Pełna nazwa miesiąca * August
%c Prezentacja daty i czasu * Thu Aug 23 14:55:02 2001
%C Rok podzielony przez 100 i obcięty do liczby całkowitej ( 00-99) 20
%d Dzień miesiąca, wypełniony zerami ( 01-31) 23
%D Krótka MM/DD/YYdata, odpowiednik%m/%d/%y 08/23/01
%e Dzień miesiąca, wypełniony spacjami ( 1-31) 23
%F Krótka YYYY-MM-DDdata, odpowiednik%Y-%m-%d 2001-08-23
%g Rok tygodniowy, ostatnie dwie cyfry ( 00-99) 01
%G Rok oparty na tygodniu 2001
%h Skrócona nazwa miesiąca * (taka sama jak %b) Aug
%H Godzina w formacie 24h ( 00-23) 14
%I Godzina w formacie 12-godzinnym ( 01-12) 02
%j Dzień roku ( 001-366) 235
%m Miesiąc jako liczba dziesiętna ( 01-12) 08
%M Minuta ( 00-59) 55
%n Znak nowego wiersza ( '\n')
%p Oznaczenie AM lub PM PM
%r 12-godzinny zegar * 02:55:02 pm
%R Czas 24-godzinny HH:MM, odpowiednik%H:%M 14:55
%S Drugi ( 00-61) 02
%t Znak tabulacji poziomej ( '\t')
%T Format czasu ISO 8601 ( HH:MM:SS), odpowiednik%H:%M:%S 14:55
%u Dzień tygodnia ISO 8601 jako liczba z poniedziałkiem jako 1( 1-7) 4
%U Numer tygodnia z pierwszą niedzielą jako pierwszym dniem pierwszego tygodnia ( 00-53) 33
%V Numer tygodnia ISO 8601 ( 00-53) 34
%w Dzień tygodnia jako liczba dziesiętna z niedzielą jako 0( 0-6) 4
%W Numer tygodnia z pierwszym poniedziałkiem jako pierwszym dniem pierwszego tygodnia ( 00-53) 34
%x Przedstawienie daty * 08/23/01
%X Reprezentacja czasu * 14:55:02
%y Rok, ostatnie dwie cyfry ( 00-99) 01
%Y Rok 2001
%z

Przesunięcie ISO 8601 względem UTC w strefie czasowej (1 minuta = 1, 1 godzina = 100)

Jeśli nie można określić strefy czasowej, żadnych znaków

+100
%Z

Nazwa lub skrót strefy czasowej *

Jeśli nie można określić strefy czasowej, żadnych znaków

CDT
%% %znak %

Sprawdźmy następujący przykład, aby zrozumieć użycie -

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
printf("date and time - $datestring\n");

Wykonanie powyższego kodu daje następujący wynik -

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013