Perl 将ISO-8601时间戳从UTC-7:00转换为“欧洲/阿姆斯特丹”(CEST)时间,即UTC+2:00
在Perl中,我使用bash命令将ISO-8601时间戳转换为本地格式YYYY-mm-dd HH:mm:SS 例如,这些时间戳在谷歌云JSON API中使用。例如 2016-08-09T17:05:05.414-07:00。请查看下面的源代码,以了解工作示例 这很好,但是有没有一种方法可以不用bash命令在Perl中实现同样的功能?当然我肯定有,但我找不到任何简单的东西Perl 将ISO-8601时间戳从UTC-7:00转换为“欧洲/阿姆斯特丹”(CEST)时间,即UTC+2:00,perl,datetime-format,iso8601,Perl,Datetime Format,Iso8601,在Perl中,我使用bash命令将ISO-8601时间戳转换为本地格式YYYY-mm-dd HH:mm:SS 例如,这些时间戳在谷歌云JSON API中使用。例如 2016-08-09T17:05:05.414-07:00。请查看下面的源代码,以了解工作示例 这很好,但是有没有一种方法可以不用bash命令在Perl中实现同样的功能?当然我肯定有,但我找不到任何简单的东西 #!/usr/bin/perl -w use strict; use warnings; my $f = `date -d
#!/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
模块显然是这方面的选择。您的原始字符串是根据ISO-8601标准格式化的,因此将直接解析它
然后,只需将时区设置为零并根据需要格式化结果
这是密码
严格使用;
使用“全部”警告;
使用特征“说”;
使用DateTime::Format::ISO8601;
说当地时间‘2016-08-09T17:05:05.414-07:00’;
次本地化时间{
我的$dt=@;
$dt=DateTime::Format::ISO8601->parse_DateTime$dt;
$dt->设置“欧洲/阿姆斯特丹”时区;
$dt->strftime“%Y-%m-%d%H:%m:%S”;
}
输出
2016-08-10 02:05:05
模块显然是这方面的选择。您的原始字符串是根据ISO-8601标准格式化的,因此将直接解析它
然后,只需将时区设置为零并根据需要格式化结果
这是密码
严格使用;
使用“全部”警告;
使用特征“说”;
使用DateTime::Format::ISO8601;
说当地时间‘2016-08-09T17:05:05.414-07:00’;
次本地化时间{
我的$dt=@;
$dt=DateTime::Format::ISO8601->parse_DateTime$dt;
$dt->设置“欧洲/阿姆斯特丹”时区;
$dt->strftime“%Y-%m-%d%H:%m:%S”;
}
输出
2016-08-10 02:05:05
我不确定你的算术!8月9日17:05:05加上时区的七个小时是8月10日00:05:05+2个小时是因为我的时区塞斯特/阿姆斯特丹!然后你需要$dt->设置时区'2:00'。出于某种原因,$dt->set_time_zone'CEST/Amsterdam'不起作用,但我正在寻找原因`在您的解决方案中,您能否使用UTC到CEST的额外计算,从而增加额外的2小时数?@Eric:我使用了欧洲/阿姆斯特丹,这很好。看我修改过的答案。我不确定你的算术!8月9日17:05:05加上时区的七个小时是8月10日00:05:05+2个小时是因为我的时区塞斯特/阿姆斯特丹!然后你需要$dt->设置时区'2:00'。出于某种原因,$dt->set_time_zone'CEST/Amsterdam'不起作用,但我正在寻找原因`在您的解决方案中,您能否使用UTC到CEST的额外计算,从而增加额外的2小时数?@Eric:我使用了欧洲/阿姆斯特丹,这很好。见我修正后的答案。