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/YY data, odpowiednik%m/%d/%y |
08/23/01 |
%e |
Dzień miesiąca, wypełniony spacjami ( 1-31 ) |
23 |
%F |
Krótka YYYY-MM-DD data, 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