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

20

使用Perl获取当前日期的最有效方法是什么, 并以ISO格式(例如"2010-10-06")表示呢?


4
你为什么担心效率?是因为性能分析器告诉你这段代码是瓶颈吗? - Daenyth
5个回答

32

最高效的是你还是电脑?

对于你:

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

15

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

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

1
对于这个程序员来说,标准化使用DateTime肯定会让事情变得更简单,并且在一个有许多陷阱和不一致之处的领域中始终使用一个相当全面的模块似乎是一个好主意,比如日期和时间计算。 - plusplus
5
如果您想包括时间,请使用DateTime->now->iso8601 - Flimm

11

Date:: 命名空间中有很多模块,其中许多可以帮助你实现所需的功能。或者,你也可以自己编写一个:

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

资源


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

5

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

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

2
哦,我以前从未考虑过使用map的这种方式。我不知道我是否喜欢它,但它肯定很聪明。 - Chas. Owens
3
这种代码是我同时爱又恨Perl的原因。 - Mark K Cowan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接