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

pla*_*etp 18 perl date

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

Cha*_*ens 30

对您或计算机最有效?

为了你:

use POSIX qw/strftime/;

print strftime("%Y-%m-%d", localtime), "\n";
Run Code Online (Sandbox Code Playgroud)

对于电脑:

my @t = localtime;
$t[5] += 1900;
$t[4]++;

printf "%04d-%02d-%02d", @t[5,4,3];
Run Code Online (Sandbox Code Playgroud)


小智 14

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

use DateTime;
my $now = DateTime->now->ymd;
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要包括时间,请使用`DateTime-> now-> iso8601`. (4认同)

zig*_*don 10

Date::命名空间中有许多模块,其中许多模块可以帮助您完成所需的操作.或者,你可以自己动手:

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

资源

  • CPAN上的Date :: namespace:http://search.cpan.org/search?query = Date%3A%3A&mode = modules


msc*_*cha 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
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 5

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

printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime];
Run Code Online (Sandbox Code Playgroud)

  • 呵呵,我以前从来没有考虑过地图的用途。我不知道我是否喜欢它,但它确实很聪明。 (2认同)
  • 这种代码是我同时爱和恨perl的原因 (2认同)