首页 > 解决方案 > Perl 将 UTC MySQL 日期时间格式化为 GMT/BST 伦敦/欧洲字符串

问题描述

我将 DateTime 格式化为2019-01-01 01:02:03从 MySQL 数据库返回。我想将其转换为Europe/London并输出格式为:

2019-01-01 01:02:03 GMT (UTC +00:00)

这也应该能够处理 BST DateTimes,例如:

2019-07-01 01:02:03UTC 将输出2019-07-01 02:02:03 BST (UTC +01:00)

我试过查看这个问题和答案,但不知道如何在提供的 DateTime 字符串上应用该语言环境转换而不是now

这是我需要的伪代码等价物,请原谅我可怕的 Perl...

use DateTime;
my $my_utc_date_time = "2019-01-01 01:02:03";

# this needs to use $my_utc_date_time not now
my $start_date = DateTime->now->set_time_zone("Europe/London")->iso8601;

my $start_date_formatted = strftime("%Y-%m-%d %H:%M:%S %Z (UTC +00:00)", $start_date);

标签: perldatetime

解决方案


use strict;
use warnings;

use DateTime;
use DateTime::Format::Strptime;

my $my_utc_date_time = "2019-07-01 01:02:03";

my $datetime_parser = DateTime::Format::Strptime->new(pattern => '%F %T',
                                                      locale => 'en_GB',
                                                      time_zone => 'UTC');

my $datetime = $datetime_parser->parse_datetime($my_utc_date_time);
print $datetime->strftime('%FT%T %Z (UTC %z)'), "\n";

my $local_datetime = $datetime->set_time_zone('Europe/London');
print $local_datetime->strftime('%FT%T %Z (UTC %z)'), "\n";

输出:

2019-07-01T01:02:03 UTC (UTC +0000)
2019-07-01T02:02:03 BST (UTC +0100)

推荐阅读