Учебники

Perl — дата и время

Эта глава даст вам базовое понимание того, как обрабатывать и манипулировать датами и временем в Perl.

Текущая дата и время

Давайте начнем с функции localtime () , которая возвращает значения для текущей даты и времени, если не задано никаких аргументов. Ниже приведен список из 9 элементов, возвращаемый функцией localtime при использовании в контексте списка:

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

Попробуйте в следующем примере напечатать различные элементы, возвращаемые функцией localtime () —

Live Demo

#!/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";

Когда приведенный выше код выполняется, он дает следующий результат —

16 Feb Sat

Если вы будете использовать функцию localtime () в скалярном контексте, она будет возвращать дату и время из текущего часового пояса, установленного в системе. Попробуйте следующий пример, чтобы напечатать текущую дату и время в полном формате —

Live Demo

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

Когда приведенный выше код выполняется, он дает следующий результат —

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

Время по Гринвичу

Функция gmtime () работает так же, как функция localtime (), но возвращаемые значения локализованы для стандартного часового пояса Гринвича. Когда вызывается в контексте списка, $ isdst, последнее значение, возвращаемое gmtime, всегда равно 0. Летнее время по Гринвичу отсутствует.

Вы должны обратить внимание на тот факт, что localtime () вернет текущее местное время на машине, на которой выполняется скрипт, а gmtime () вернет универсальное среднее время по Гринвичу, или GMT (или UTC).

Попробуйте следующий пример, чтобы напечатать текущую дату и время, но в масштабе GMT ​​-

Live Demo

#!/usr/local/bin/perl

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

Когда приведенный выше код выполняется, он дает следующий результат —

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

Формат даты и времени

Вы можете использовать функцию localtime () для получения списка из 9 элементов, а позже вы можете использовать функцию printf () для форматирования даты и времени на основе ваших требований следующим образом:

Live Demo

#!/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);

Когда приведенный выше код выполняется, он дает следующий результат —

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

Время эпохи

Вы можете использовать функцию time () для получения времени эпохи, т. Е. Количества секунд, прошедших с указанной даты, в Unix это 1 января 1970 года.

Live Demo

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

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

Когда приведенный выше код выполняется, он дает следующий результат —

Number of seconds since Jan 1, 1970 - 1361022130

Вы можете преобразовать заданное количество секунд в строку даты и времени следующим образом:

Live Demo

#!/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";

Когда приведенный выше код выполняется, он дает следующий результат —

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

Функция POSIX strftime ()

Вы можете использовать функцию POSIX strftime () для форматирования даты и времени с помощью следующей таблицы. Обратите внимание, что спецификаторы, отмеченные звездочкой (*), зависят от локали.

Тендерный Заменен на пример
%a Сокращенное название дня недели * Thu
%A Полное название дня недели * Thursday
%b Сокращенное название месяца * Aug
%B Полное название месяца * August
%c Дата и время представления * Thu Aug 23 14:55:02 2001
%C Год делится на 100 и усекается до целого числа ( 00-99 ) 20
%d День месяца, дополненный нулями ( 01-31 ) 23
%D Короткая дата MM/DD/YY , эквивалентная %m/%d/%y 08/23/01
%e День месяца, дополненный пробелами ( 1-31 ) 23
%F Короткая дата YYYY-MM-DD , эквивалентная %Y-%m-%d 2001-08-23
%g Недельный год, последние две цифры ( 00-99 ) 01
%G Недельный год 2001
%h Сокращенное название месяца * (аналогично %b ) Aug
%H Час в 24-часовом формате ( 00-23 ) 14
%I Час в 12-часовом формате ( 01-12 ) 02
%j День года ( 001-366 ) 235
%m Месяц как десятичное число ( 01-12 ) 08
%M Минута ( 00-59 ) 55
%n Символ новой строки ( '\n' )
%p Обозначение AM или PM PM
%r Время 12 часов * 02:55:02 pm
%R 24-часовой HH:MM , эквивалентный %H:%M 14:55
%S Второй ( 00-61 ) 02
%t Горизонтальный символ табуляции ( '\t' )
%T Формат времени ISO 8601 ( HH:MM:SS ), эквивалентный %H:%M:%S 14:55
%u ISO 8601 — будний день, номер понедельника — 1 ( 1-7 ). 4
%U Номер недели с первым воскресеньем в качестве первого дня первой недели ( 00-53 ) 33
%V Номер недели ISO 8601 ( 00-53 ) 34
%w День недели как десятичное число с воскресеньем 0 ( 0-6 ) 4
%W Номер недели с первым понедельником в качестве первого дня первой недели ( 00-53 ) 34
%x Дата представления * 08/23/01
%X Время представления * 14:55:02
%y Год, последние две цифры ( 00-99 ) 01
%Y Год 2001
%z

ISO 8601 смещение от UTC в часовом поясе (1 минута = 1, 1 час = 100)

Если часовой пояс не может быть удален, нет символов

+100
%Z

Название или аббревиатура часового пояса *

Если часовой пояс не может быть удален, нет символов

CDT
%% Знак % %

ISO 8601 смещение от UTC в часовом поясе (1 минута = 1, 1 час = 100)

Если часовой пояс не может быть удален, нет символов

Название или аббревиатура часового пояса *

Если часовой пояс не может быть удален, нет символов

Давайте проверим следующий пример, чтобы понять использование —

Live Demo

#!/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");

Когда приведенный выше код выполняется, он дает следующий результат —