假设我有一个像“2009-08-18 13:52:54-04”这样的时区。我可以使用这样的一行解析大部分内容:
datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S")
但是,我无法让时区工作。有一个%Z处理文本时区(“EST”,“UTC”等),但我没有看到任何可以解析“-04”的内容。
答案 0 :(得分:22)
也许你可以使用dateutil.parser.parse? wiki.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)
我也会对更优雅的解决方案感兴趣。