PERL如何将localtime格式转换为unixtime

PERL如何将localtime格式转换为unixtime,perl,unix-timestamp,Perl,Unix Timestamp,有人能帮我吗?我在日志文件中有一个时间值,其格式如下: 2012年8月28日星期二09:50:06 我需要将此时间值转换为unixtime 关于这适合我(需要): 使用Time::Piece模块中的strtime函数解析日期,然后使用strftime函数返回Unix时间戳 use Time::Piece; $parsed = Time::Piece->strptime("Tue Aug 28 09:50:06 2012", "%a %b %e %T %Y"); $unixtime = $p

有人能帮我吗?我在日志文件中有一个时间值,其格式如下:

2012年8月28日星期二09:50:06

我需要将此时间值转换为unixtime

关于

这适合我(需要):


使用Time::Piece模块中的strtime函数解析日期,然后使用strftime函数返回Unix时间戳

use Time::Piece;
$parsed = Time::Piece->strptime("Tue Aug 28 09:50:06 2012", "%a %b %e %T %Y");
$unixtime = $parsed->strftime("%s");
您最好的选择是,这是一个核心模块,因此不需要安装。它有一个用于解析时间/日期字符串的
strtime
方法和一个用于返回Unix历元时间的
epoch
方法

如图所示,可以方便地将其滚动到子例程中

use strict;
use warnings;

use Time::Piece ();

print date_to_epoch('Tue Aug 28 09:50:06 2012'), "\n";

sub date_to_epoch {
   return Time::Piece->strptime($_[0], '%a %b %d %T %Y')->epoch;
}
输出

1346147406

嗨,Brian,“$parsed->strftime(“%s”);”没有传递任何内容。可能是因为我在Windows上运行它吗?@taiko:
strftime(“%s”)
在我的Windows机器上运行正常,所以一定是出了什么问题。更好的是
epoch
方法,它避免了格式化的开销,并返回一个数字而不是字符串:请参阅我的回答hmmm,这很有趣,我尝试打印strftime的其他元素,它们很好,只有%s没有提供anything@taiko我不知道Windows,但它在Ubuntu Linux上运行得很好。@taiko,您可能正在使用一个依赖于MicrosoftsC运行时库(ActiveState?)的Perl发行版。“%s”转换说明符是供应商的扩展,Microsoft的实现不支持该说明符。此说明符运行良好,但我仍然想知道为什么Brian的解决方案不适用于meMaybe您有较旧版本的
Time::Piece
?最新版本是v1.20,我认为在某种程度上,它被改为使用平台
strftime
,而不是纯Perl内部实现注意:如果使用的时区是夏令时,则该格式的日期是不明确的。
1346147406