Определение текущей даты
Проблема
Требуется определить год, месяц и число для текущей даты.
Решение
Воспользуйтесь функцией localtime.
Без аргументов она возвращает текущую дату и время.
Вы можете вызвать localtime и извлечь необходимую информацию из полученного списка:
($DAY, $MONTH, $YEAR) = (localtime) [3,4,5];
Модуль Time::localtime переопределяет localtime так, чтобы функция возвращала объект Time::tm:
use Time::localtime;
$tm = localtime;
($DAY, $MONTH, $YEAR) = ($tm->mday, $tm->mon, $tm->year);
Комментарий
Вывод текущей даты в формате ГГГГ-ММ-ДД с использованием стандартной функции localtime выполняется следующим образом:
($day, $month, $year) = (localtime)[3, 4, 5];
printf("The current date is %04d %02d %02d\n", $year+1900, $month+1, $day);
The current date is 1999 04 28
Нужные поля из списка, возвращаемого localtime, извлекаются с помощью среза. Запись могла выглядеть иначе:
($day, $mooth, $year) = (localtime)[3..5]:
А вот как текущая дата выводится в формате ГГГГ-ММ-ДД (рекомендованном стандартом ISO 8601) с использованием Time::localtime:
use Time::localtime;
$tm = localtime;
printf("The current date is %04d-%02d-%02d\n",
$tm->year+1900,($tm->mon)+1, $tm->mday);
The current date is 1999-04-28
В короткой программе объектный интерфейс выглядит неуместно. Однако при большом объеме вычислений с
отдельными компонентами даты обращения по имени заметно упрощают чтение программы.
То же самое можно сделать и хитроумным способом, не требующим создания временных переменных:
printf("The current date is %04d-%02d-%02\n",
sub { ($_[5]+1900, $_[4]+1, $_[3]) }->(localtime));
Кроме того, в модуле POSIX имеется функция strftime:
use POSIX qw(strftime);
print strftime "%Y-%m-%d\n", localtime;
Функция gmtime работает аналогично
localtime, но возвращает время по Гринвичу, а не для местного часового пояса.
См. такжеОписание функций
localtime и
gmtime
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|