Какой самый эффективный способ получить текущую дату в формате ISO (например, «2010-10-06») с использованием Perl?
Самый эффективный для вас или компьютера?
Для вас:
use POSIX qw/strftime/; print strftime("%Y-%m-%d", localtime), "\n";
Для компьютера:
my @t = localtime; $t[5] += 1900; $t[4]++; printf "%04d-%02d-%02d", @t[5,4,3];
Или вы можете использовать модуль DateTime, который в наши дни является де-факто стандартным модулем обработки дат. Нужно установить его из CPAN.
use DateTime; my $now = DateTime->now->ymd;
В пространстве имен Date:: имеется множество модулей, многие из которых могут помочь вам сделать то, что вам нужно. Или вы можете просто бросить свой собственный:
Date::
my ($day, $mon, $year) = (localtime)[3..5]; printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day;
Ресурсы
Вы можете использовать модуль Time :: Piece (в комплекте с Perl 5.10 и выше или вы можете скачать из CPAN), следующим образом:
use strict; use warnings; use Time::Piece; my $today = localtime->ymd(); # Local time zone my $todayUtc = gmtime->ymd(); # UTC
Это не создает никаких временных переменных:
printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime];