time и now


Две функции, которые возвращают текущее время (по крайней мере, то значение, которое ваше система принимает за текущее) – это time и now. Пример:

> say time; say now;
1292460064
Instant:2010-12-16T00:41:4.873248Z


Первая очевидная разница – time возвращает POSIX в целочисленном виде. now возвращает объект под названием Instant. Если вам нужны доли секунд и распознавание секунд координации времени, используйте now.

DateTime и его друзья


Большую часть времени вам нужно хранить даты, отличающиеся от now. Для этого используется объект DateTime. Для сохранения текущего времени:

my $moment = DateTime.new(now); # or DateTime.new(time)


Есть ещё два способа создания объекта:

my $dw = DateTime.new(:year(1963), :month(11), :day(23), :hour(17), :minute(15));


Это в UTC. Если вам необходима другая временная зона, используйте дополнение :timezone. В нашем случае обязателен только :year, остальное будет по умолчанию равно 1 января.

Это довольно сложный способ. Можно создать объект DateTime через ISO 8601 timestamp, в виде строки:

my $dw = DateTime.new("1963-11-23T17:15:00Z");


Z означает UTC. Можно заменить Z на +hhmm или -hhmm, где ‘hh’ – смещение в часах, а ‘mm’ – в минутах.

Ещё есть объект Date, который создаётся так же, но без часов, минут и секунд:

my $jfk = Date.new("1963-11-22"); # и также вы можете использовать :year и другие префиксы


Иногда вам требуется работать с днями, не заботясь о временных зонах и секундах коррекции. Гораздо проще работать с чистыми датами. Например, у Date есть встроенные методы .succ и .pred, поэтому можно инкрементировать и декрементировать их как угодно:

$jfk++; # День после JFK

Комментарии (0)