在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时间,同时考虑夏令时的主要内容,如果未能解决你的问题,请参考以下文章