在Perl中,如何高效地解析unix的date命令的输出,并考虑到时区并转换为UTC?如何在Perl中将多个时区的unix日期输出转换为UTC?
我已阅读了很多关于stackoverflow的类似问题,但似乎很少考虑解析多个时区。相反,他们似乎手动设置时区并假定它保持不变。
# Example Input Strings:
my @inputs = (
'Tue Oct 12 06:31:48 EDT 2010',
'Tue Oct 12 07:49:54 BST 2010',
);
我尝试以下无济于事:
foreach my $input (@inputs) {
my $t = Time::Piece->strptime($input,
'%a %b %d %T %Z %Y');
print $t->cdate, "\n";
}
看来问题是时区(%Z)。此外,时区字段似乎并不存在于Time :: Piece中,这需要我编写自定义代码才能转换为UTC,这看起来......错了。
上下文: 我试图解析来自各种使用unix date命令的时间戳记源的遗留日志。理想情况下,我想将所有时间戳转换为UTC。
任何帮助将不胜感激。
您将在这里遇到的根本问题是3个字母的时区缩写不是唯一的。 “EST”的含义取决于您所在的国家。 – cjm 2010-10-12 18:14:27
谢谢您指出含糊之处。我可以替换我所知道的正确的长名称(EST5EDT对于该日志是正确的)。不过,我仍然不确定如何在不编写自定义代码的情况下提取时区,然后在我选择的模块中手动设置时区(DateTime看起来相当不错),希望能够映射到正确的字符串。 – vlee 2010-10-12 18:38:47