在python中将具有时区缩写的非UTC时间字符串转换为UTC时间,同时考虑夏令时

Posted

技术标签:

【中文标题】在python中将具有时区缩写的非UTC时间字符串转换为UTC时间,同时考虑夏令时【英文标题】:Convert non-UTC time string with timezone abbreviation into UTC time in python, while accounting for daylight savings 【发布时间】:2012-06-24 00:39:09 【问题描述】:

由于时区缩写,我很难将非 UTC 时间的字符串表示形式转换为 UTC。

(更新:似乎timezone abbreviations may not be unique。如果是这样,也许我也应该考虑到这一点。

我一直在尝试使用 datetutil 和 pytz 寻找解决此问题的方法,但没有任何运气。

建议或解决方法将不胜感激。

string = "Jun 20, 4:00PM EDT" 

我想将其转换为 UTC 时间,并在适当的时候考虑夏令时。

更新:找到了一些可以帮助更有经验的用户回答问题的参考资料。

基本上,我会想象部分解决方案与this 相反。

最终更新(重要)

取自dateutil docs examples。

一些基于 date 命令的简单示例,使用 TZOFFSET 字典提供 BRST 时区偏移量。

parse("Thu Sep 25 10:36:28 BRST 2003", tzinfos=TZOFFSETS) datetime.datetime(2003, 9, 25, 10, 36, 28, tzinfo=tzoffset('BRST', -10800))

parse("2003 10:36:28 BRST 25 Sep Thu", tzinfos=TZOFFSETS) datetime.datetime(2003, 9, 25, 10, 36, 28, tzinfo=tzoffset('BRST', -10800))

将此与库 such as found here. 结合使用,您将找到解决此问题的方法。

【问题讨论】:

年份应该使用什么值?当前? @beargle - 是的。我会假设所有这些输出都是当前的。 是的,时区缩写在世界范围内并不是独一无二的。你能假设一个国家吗? 看看@Nas Banov 的回答here 【参考方案1】:

使用Nas Banov's excellent dictionary 将时区缩写映射到UTC 偏移量:

import dateutil
import pytz

# timezone dictionary built here: https://***.com/a/4766400/366335
# tzd = ...

string = 'Jun 20, 4:00PM EDT'
date = dateutil.parser.parse(string, tzinfos=tzd).astimezone(pytz.utc)

【讨论】:

我正要回来更新关于库的更新。

以上是关于在python中将具有时区缩写的非UTC时间字符串转换为UTC时间,同时考虑夏令时的主要内容,如果未能解决你的问题,请参考以下文章

时区转换从 UTC 到新时区

如何在 SAP SQL Anywhere 中将 UTC 时间戳转换为命名时区?

时区缩写 UTC, CST, GMT, CEST 以及转换

在python中将日期时间从PDT转换为UTC

英语里面UTC是哪个时区?

将输入字符串日期时间从不同时区转换为UTC