在python中获取给定日期和UTC偏移量的GMT时间

Posted

技术标签:

【中文标题】在python中获取给定日期和UTC偏移量的GMT时间【英文标题】:Get the GMT time given date and UTC offset in python 【发布时间】:2011-05-01 23:40:09 【问题描述】:

我有一个如下格式的日期字符串'%Y%m%d%H%M%S',例如'19981024103115' 以及另一个 UTC 本地偏移量字符串,例如 '+0100'

在 python 中将其转换为 GMT 时间的最佳方法是什么

所以结果将是'1998-10-24 09:31:15'

【问题讨论】:

【参考方案1】:

您可以为此使用dateutil

>>> from dateutil.parser import parse
>>> dt = parse('19981024103115+0100')
>>> dt
datetime.datetime(1998, 10, 24, 10, 31, 15, tzinfo=tzoffset(None, 3600))
>>> dt.utctimetuple()
time.struct_time(tm_year=1998, tm_mon=10, tm_mday=24, tm_hour=9, tm_min=31, tm_sec=15, tm_wday=5, tm_yday=297, tm_isdst=0)

【讨论】:

+1,感谢您提供更好的答案。 time.strftime("%Y-%m-%d %H:%M:%S", t) 将提供所需的输出。事实证明,对于像“+0100”这样的时区,使用 time.strptime() 进行解析并不能很好地使用 %Z。 @bstpierre,我一直不明白为什么datetime 不包括对时区的更好支持。这似乎是一个必不可少的要求。 @Mark Ransom - 我说的是time,但我同意你的评论。正确处理时区并不容易。 @bstpierre,我说datetime 是一个模块而不是一个类,所以我的评论也包括time 非常感谢这个答案,我花了将近 30 分钟来解决这个问题。【参考方案2】:

只要您知道时间偏移量始终为 4 位形式,这应该可以。

def MakeTime(date_string, offset_string):
    offset_hours = int(offset_string[0:3])
    offset_minutes = int(offset_string[0] + offset_string[3:5])
    gmt_adjust = datetime.timedelta(hours = offset_hours, minutes = offset_minutes)
    gmt_time = datetime.datetime.strptime(date_string, '%Y%m%d%H%M%S') - gmt_adjust
    return gmt_time

【讨论】:

@adw,好点,当偏移量为负且分钟数非零时出现错误,例如'-0130'。固定。 不,不固定。例如,将offset = -100offset = -101 进行比较。 @adw,再次感谢,我太草率了。这次我尝试了不同的方法,我认为它终于正确了。

以上是关于在python中获取给定日期和UTC偏移量的GMT时间的主要内容,如果未能解决你的问题,请参考以下文章

用于 GMT 偏移的 php 日期和时间工具

从 UTC 偏移量获取时区名称

使用 Joda-Time 获取给定日期和时区的 UTC 偏移量

给定 UTC 时间戳和 UTC 偏移量,是不是可以在 Python 中获取时区?

是否有返回 TimeZone 或基于坐标的偏移量的函数?

ruby 获取给定时区的时间