Какой самый эффективный способ получить текущую дату в формате ISO (например, "2010-10-06" ) с помощью Perl?
Как получить текущую дату в формате ISO с помощью Perl?
Ответ 1
Наиболее эффективен для вас или компьютера?
Для вас:
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];
Ответ 2
Или вы можете использовать модуль DateTime, который в настоящий момент является стандартным модулем обработки даты де-факто. Необходимо установить его из CPAN.
use DateTime;
my $now = DateTime->now->ymd;
Ответ 3
В пространстве имен Date::
имеется много модулей, многие из которых могут помочь вам сделать то, что вам нужно. Или вы можете просто перевернуть свои собственные:
my ($day, $mon, $year) = (localtime)[3..5];
printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day;
Ресурсы
- Дата:: namespace в CPAN: http://search.cpan.org/search?query=Date%3A%3A&mode=module
Ответ 4
Вы можете использовать модуль 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
Ответ 5
Это не создает временных переменных:
printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime];