首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ISO-8601时间戳从UTC-7:00转换为“欧洲/阿姆斯特丹”时间,即UTC+2:00

将ISO-8601时间戳从UTC-7:00转换为“欧洲/阿姆斯特丹”时间,即UTC+2:00
EN

Stack Overflow用户
提问于 2016-08-10 16:18:55
回答 1查看 1.2K关注 0票数 1

在Perl中,我使用bash命令将ISO-8601时间戳转换为本地格式YYYY-mm-dd HH:MM:SS

例如,这些时间戳在Google Cloud JSON API中使用。例如2016-08-09T17:05:05.414-07:00。请查看下面的源代码以获取工作示例。

这可以很好地工作,但是有没有一种方法可以在不使用bash命令的情况下在Perl中完成同样的工作呢?我肯定有,但我找不到任何简单的东西。

代码语言:javascript
复制
#!/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
EN

回答 1

Stack Overflow用户

发布于 2016-08-10 17:15:12

对于这一点,DateTime模块是显而易见的选择。原始字符串的格式符合ISO-8601标准,因此DateTime::Format::ISO8601将直接对其进行解析

然后,只需将时区设置为零并根据需要格式化结果

下面是代码

代码语言:javascript
复制
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');
}

输出

代码语言:javascript
复制
2016-08-10 02:05:05
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38867832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档