使用以下格式的Perl时间:20130527

时间:2013-05-27 01:12:02

标签: perl

我正在寻找一种在Perl中生成以下内容的不太长的方法:

获取当前时间(月,日和年)的代码的一部分。例如,如果我们在2013年5月27日,那么输出应该是20130527

我现在如果我们使用“localtime”,比如

$date_str = localtime;

输出格式为:Wed Jul 18 07:24:05 2001 是否有其他特殊变量可用?

4 个答案:

答案 0 :(得分:7)

您可以使用标准POSIX模块中的strftime

use POSIX 'strftime';
say strftime "%Y%m%d", localtime;

输出:

20130526

答案 1 :(得分:5)

在Perl中,存储的时间是自 The Epoch 以来的秒数。 时代通常是1970年1月1日。

这使得排序和计算未来日期变得更好。如果您需要知道从现在开始30天的日期,您可以添加2,592,000(30天内的秒数)。

Perl有一个名为time的标准函数,它返回自The Epoch以来的秒数。然后,您可以使用localtimegmtime将其转换为时间元素数组(日,年,小时等)。

出于某些奇怪的原因,Perl从来没有内部函数来获取时间元素数组并将其转换回自The Epoch以来的秒数。但是,Perl总是有一个标准模块,它使用函数timelocaltimegm执行此操作。在5.0之前的Perl日,你会require "timelocal.pl";。在Perl 5.0中,您现在use Time::Local;

localtimegmtime,{{ 1}}和timelocal函数,在Perl 5.10中,添加了两个新模块Time::PieceTime::Seconds。这两个模块允许您使用timegm中内置的strptimestrftime函数格式化时间。

如果你有Perl 5.10.0或更高版本,你可以轻松实现:

Time::Piece

但是,您的程序应该使用自 The Epoch 以来的秒数作为程序内部时间。您应该以这种格式存储时间。您应该以这种格式计算时间,并且您应该以这种格式为所有函数传递时间。

这是因为其他Perl模块需要这种格式的时间,更重要的是,其他将要查看和维护代码的Perl开发人员需要这种格式的时间。

use Time::Piece;

my $time = localtime; #$time is a Time::Piece object

# $time_string is in YYYYMMDD format
my $time_string = sprintf "%04d%02d%02d%", $time->year, $time->month, $time->day;

# Another way to do the above using the strftime function:
my $time_string = $time->strftime("%Y%m%d");

答案 2 :(得分:4)

或者,在列表上下文中使用localtime:

($d,$m,$y) = (localtime)[3,4,5];
say sprintf("%4d%02d%02d", $y+1900, $m+1, $d);

答案 3 :(得分:1)

你可以像下面这样做..

use POSIX;
my $today = POSIX::strftime('%Y%m%d', localtime);
print "$today\n";

Output: 20130527