Perl时间与Unix日期输出不一致

时间:2014-10-29 14:30:59

标签: perl unix unix-timestamp

我是perl的初学者,并尝试使用我的第一个perl脚本将时间信息转换为特定格式。我理解其他stackoverflow问题中的月份Jan = 0和1900年= 0 in perl。即使在调整它们之后,我也没有在unix和perl之间看到相同的输出。

这是我尝试过的东西。

Unix的:

  

date -d @ 915149280

给了我:

Thu Dec 31 19:08:00 EST 1998

的Perl:

$time = 915149280;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time);
$year = $year + 1900;
$mon = $mon + 1;
print "Formated time = $mday/$mon/$year $hour:$min:$sec $weekday[$wday]\n";

给了我:

形成时间= 1/1/1999 0:8:0周五

perl行中有错误吗?我该怎么做才能获得与date命令相同的输出? (不是格式化部分,而是时间)

我不是在寻找所有的领域,只有这一年对我很重要。

3 个答案:

答案 0 :(得分:5)

我假设您正在讨论时差而不是格式差异,因为您的Perl代码甚至没有尝试复制该格式。

使用localtime代替gmtimedate命令默认使用您的本地时间。请注意,它显示“EST”,但gmtime返回UTC,这是一个5小时的差异。

您还应该考虑使用模块来处理日期格式。但这不会阻止当地时间与UTC之间的混淆。

答案 1 :(得分:1)

Time::Piece已包含在Perl中近7年,将使您的时间和日期代码变得更加容易。

use Time::Piece;

my $then = gmtime(915149280);
print $then->strftime('%d-%m-%Y %H:%M:%S %a'); # produces 01-01-1999 00:08:00 Fri

答案 2 :(得分:0)

您可以使用POSIX模块中的strftime来轻松完成此操作。

perl -MPOSIX=strftime -le 'print strftime "%a %b %d %T %Y",localtime(915149280)'

Thu Dec 31 16:08:00 1998

POSIX模块自1994年以来一直是core模块。通过使用显式导入列表,您可以避免加载大约500多个您不需要的符号。