在Perl中,我使用bash命令将ISO-8601时间戳转换为本地格式YYYY-mm-dd HH:MM:SS
。
例如,这些时间戳用于Google Cloud JSON API。例如
2016-08-09T17:05:05.414-07:00
。请查看下面的来源以获取一个工作示例。
这很好用,但有没有办法在不使用bash命令的情况下在Perl中完成相同的操作?当然我确定有,但我找不到任何简单的东西。
#!/usr/bin/perl -w
use strict;
use warnings;
my $f = `date -d 2016-08-09T17:05:05.414-07:00 +'%Y-%m-%d %H:%M:%S'`;
chop $f;
print "$f\n"; # 2016-08-10 02:05:05
答案 0 :(得分:4)
DateTime
模块是明显的选择。您的原始字符串是根据ISO-8601标准格式化的,因此DateTime::Format::ISO8601
将直接解析它
然后,只需将时区设置为零并根据需要格式化结果
这是代码
use strict;
use warnings 'all';
use feature 'say';
use DateTime::Format::ISO8601;
say localise_time('2016-08-09T17:05:05.414-07:00');
sub localise_time {
my ($dt) = @_;
$dt = DateTime::Format::ISO8601->parse_datetime($dt);
$dt->set_time_zone('Europe/Amsterdam');
$dt->strftime('%Y-%m-%d %H:%M:%S');
}
2016-08-10 02:05:05