如何在Python中使用UTC偏移量解析时区?

时间:2009-08-19 19:30:17

标签: python datetime

假设我有一个像“2009-08-18 13:52:54-04”这样的时区。我可以使用这样的一行解析大部分内容:

datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S")

但是,我无法让时区工作。有一个%Z处理文本时区(“EST”,“UTC”等),但我没有看到任何可以解析“-04”的内容。

4 个答案:

答案 0 :(得分:22)

也许你可以使用dateutil.parser.parsewiki.python.org/WorkingWithTime上也提到了这种方法。

>>> from dateutil.parser import parse
>>> parse("2009-08-18 13:52:54-04")
datetime.datetime(2009, 8, 18, 13, 52, 54, tzinfo=tzoffset(None, -14400))

(这个问题是否重复?)

答案 1 :(得分:3)

使用Babel,特别是parse_datetime

答案 2 :(得分:0)

您可以直接在构造函数上执行此操作:class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo ]]]]]),tzinfo是datetime.tzinfo提取的对象。

  

tzinfo是一个抽象的基础clase,意味着不应该直接实例化这个类。您需要派生一个具体的子类,并且(至少)提供您使用的datetime方法所需的标准tzinfo方法的实现。 datetime模块不提供tzinfo的任何具体子类。

您需要覆盖的是utcoffset(self, dt)方法。

  

返回本地时间与UTC的偏移量,以UTC为单位以东为单位。如果当地时间在UTC以西,那么这应该是负数。请注意,这是UTC的总偏移量;例如,如果tzinfo对象同时表示时区和DST调整,则utcoffset()应返回其总和。如果UTC偏移量未知,则返回None。否则返回的值必须是timedelta对象,指定-1439到1439范围内的整数分钟(1440 = 24 * 60;偏移的幅度必须小于一天)。 utcoffset()的大多数实现可能看起来像这两个中的一个:

     

return CONSTANT # fixed-offset class

     

return CONSTANT + self.dst(dt) # daylight-aware class

     

如果utcoffset()没有返回None,则dst()也不应返回None。

utcoffset()的默认实现引发NotImplementedError。

答案 3 :(得分:0)

我最近遇到了同样的问题并使用此代码解决了这个问题:

gmt_offset_str = time_string[-3:]
gmt_offset_seconds = int(gmt_offset_str)*60*60
timestamp = time.strptime(time_string[:-4], '%Y-%m-%d %H:%M:%S')
return time.localtime(time.mktime(timestamp)-gmt_offset_seconds)

我也会对更优雅的解决方案感兴趣。