在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发布于 2016-08-10 17:15:12
对于这一点,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:05https://stackoverflow.com/questions/38867832
复制相似问题