Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl以ISO格式获取当前日期?_Perl_Date - Fatal编程技术网

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

如何使用Perl以ISO格式获取当前日期?,perl,date,Perl,Date,使用Perl以ISO格式(例如“2010-10-06”)获取当前日期的最有效方法是什么?在日期::名称空间中有很多模块,其中许多模块可以帮助您完成所需的任务。或者,您可以自己滚动: my ($day, $mon, $year) = (localtime)[3..5]; printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day; 资源 CPAN上的日期::命名空间: 对您或计算机最有效 给你: use POSIX qw/strftime/; pr

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

日期::
名称空间中有很多模块,其中许多模块可以帮助您完成所需的任务。或者,您可以自己滚动:

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

  • CPAN上的日期::命名空间:

对您或计算机最有效

给你:

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];
您可以使用该模块(与Perl 5.10及更高版本捆绑在一起,也可以从CPAN下载),如下所示:

use strict;
use warnings;
use Time::Piece;

my $today = localtime->ymd();        # Local time zone
my $todayUtc = gmtime->ymd();        # UTC

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

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

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

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

你为什么担心效率?您的分析器是否告诉过您,您的代码的这一部分是一个热点?对DateTime进行标准化肯定会使程序员的工作更简单,在一个有很多问题和不一致的领域,比如日期和时间的计算使用
DateTime->now->iso8601
,如果你想把时间也包括在内的话,坚持使用一个相当全面的模块似乎是一个好主意。哈,我以前从来没有考虑过在地图中使用它。我不知道我是否喜欢它,但它确实很聪明。这种代码就是我同时喜欢和讨厌perl的原因