我正在尝试将日期字符串解码为纪元,但我很难获得时区。这是Amazon S3密钥的最后修改日期。
time.strptime(key.last_modified, '%Y-%m-%dT%H:%M:%S.%Z')
ValueError: time data u'2013-10-20T00:41:32.000Z'
does not match format '%Y-%m-%dT%H:%M:%S.%Z'
如果我摆脱时区(.000Z)它可以工作,但我也需要时区。
答案 0 :(得分:8)
.000Z
未被识别为时区偏移。实际上,您有毫秒和时区(Z
是UTC),正式,time.strptime()
解析器无法处理毫秒。在某些平台%f
将解析微秒部分,然后丢弃该信息。
然而,datetime.datetime.strptime()
class method 可以,但不是时区;将Z
解析为文字并且有效:
from datetime import datetime
datetime.strptime(key.last_modified, '%Y-%m-%dT%H:%M:%S.%fZ')
演示:
>>> from datetime import datetime
>>> import time
>>> example = u'2013-10-20T00:41:32.000Z'
>>> datetime.strptime(example, '%Y-%m-%dT%H:%M:%S.%fZ')
datetime.datetime(2013, 10, 20, 0, 41, 32)
>>> time.strptime(example, '%Y-%m-%dT%H:%M:%S.%fZ')
time.struct_time(tm_year=2013, tm_mon=10, tm_mday=20, tm_hour=0, tm_min=41, tm_sec=32, tm_wday=6, tm_yday=293, tm_isdst=-1)
请注意,在我的Mac OS X笔记本电脑上,%f
适用于time.strptime()
;但是,并不保证能在任何地方工作。
使用datetime.timetuple()
method可以将datetime.datetime()
对象转换为时间元组。
答案 1 :(得分:4)
2013-10-20T00:41:32.000Z
在这个字符串中,32.000是秒,精度达到千分之一。 'Z'是UTC的时区,通俗地称为Zulu时间。
如果您在Python 2.x文档中查看此table,%S
参数只能处理[00,61]范围,不包括小数点。 61是闰秒的原因。这就是你的字符串格式不匹配的原因。您需要从字符串中删除小数点后面的三个零。