如何使用Perl获取ISO格式的当前日期?

问题描述:

使用Perl获取ISO格式当前日期的最有效方式是什么(例如“2010-10-06”)?如何使用Perl获取ISO格式的当前日期?

+4

你为什么要担心的效率?你的分析器是否告诉过你这段代码是一个热点? – Daenyth 2010-10-06 17:57:58

最有效的,你还是电脑?

对于你:

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

命名空间Date::中有很多模块,其中很多模块可以帮助您执行所需的任务。或者,你可以滚你自己:

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

资源

+0

别忘了'DateTime'! – CanSpice 2010-10-06 18:06:39

可以使用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 

或者你可以使用DateTime模块,它似乎是事实上的标准日期处理模块e天。需要从CPAN安装它。

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

在DateTime上进行标准化对于这个程序员来说当然会让事情变得更简单,并且对于所有事物一直使用一个相当全面的模块似乎是一个不错的主意,它有很多细节和不一致之处,如日期和时间计算 – plusplus 2010-10-07 09:04:31

+4

使用'DateTime-> now-> iso8601'如果你想要包括的时间。 – Flimm 2013-08-01 15:32:59

这不会创建任何临时变量:

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

呵呵,我以前从来没有考虑过使用地图。我不知道我是否喜欢它,但它确实很聪明。 – 2014-03-28 09:08:53

+2

这种代码就是为什么我同时爱和恨Perl – 2017-05-20 21:31:37