2010-10-06 4 views
17

Каков наиболее эффективный способ получить текущую дату в формате ISO (например, «2010-10-06») с использованием Perl?Как получить текущую дату в формате ISO с помощью Perl?

+4

Почему вы беспокоитесь об эффективности? Ваш профилировщик сказал вам, что этот раздел вашего кода является точкой доступа? – Daenyth

ответ

29

Наиболее эффективным для вас или компьютера?

Для вас:

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]; 
10

В пространстве имен Date:: есть много модулей, многие из которых могут помочь вам в том, что вам нужно. Или, вы можете просто свернуть свой собственный:

my ($day, $mon, $year) = (localtime)[3..5]; 
printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day; 

Ресурсы

+0

Не забудьте 'DateTime'! – CanSpice

6

Вы можете использовать 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 
14

Или вы можете использовать модуль DateTime, который, по-видимому, является стандартным модулем обработки даты de facto thes е дней. Необходимо установить его из CPAN.

use DateTime; 
my $now = DateTime->now->ymd; 
+0

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

+4

Используйте 'DateTime-> now-> iso8601''. если вы хотите, чтобы время было включено. – Flimm

5

Это не создает каких-либо временных переменных:

printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime]; 
+1

Да, я никогда раньше не рассматривал это использование для карты. Я не знаю, нравится ли мне это, но это, безусловно, умно. –

+2

Этот вид кода, почему я одновременно люблю и ненавижу perl –

Смежные вопросы