我正在尝试将'2015-09-15T17:13:29.380Z'
转换为毫秒。
起初我用过:
time.mktime(
datetime.datetime.strptime(
"2015-09-15T17:13:29.380Z",
"%Y-%m-%dT%H:%M:%S.%fZ"
).timetuple()
)
我得到1442330009.0
- 没有微秒。我认为time.mktime
将数字四舍五入到最接近的秒数。
最后我做了:
origTime = '2015-09-15T17:13:29.380Z'
tupleTime = datetime.datetime.strptime(origTime, "%Y-%m-%dT%H:%M:%S.%fZ")
microsecond = tupleTime.microsecond
updated = float(time.mktime(tupleTime.timetuple())) + (microsecond * 0.000001)
是否有更好的方法以及如何使用时区?
答案 0 :(得分:3)
您的输入时间是UTC;除非您的本地时区始终为UTC,否则在此处使用time.mktime()
是不正确的。
有两个步骤:
将输入rfc 3339时间字符串转换为表示UTC时间的日期时间对象
from datetime import datetime
utc_time = datetime.strptime("2015-09-15T17:13:29.380Z",
"%Y-%m-%dT%H:%M:%S.%fZ")
你已经做到了。另请参阅Convert an RFC 3339 time to a standard Python timestamp
将UTC时间转换为以毫秒为单位的POSIX时间:
from datetime import datetime, timedelta
milliseconds = (utc_time - datetime(1970, 1, 1)) // timedelta(milliseconds=1)
# -> 1442337209380
对于适用于Python 2.6-3 +的版本,请参阅How can I convert a datetime object to milliseconds since epoch (unix time) in Python?
答案 1 :(得分:0)
不幸的是,timetuple
中没有毫秒。但是,您不需要timetuple
。对于时间戳,只需调用
datetime.strptime(...).timestamp()
至于时区,请查看tzinfo
的{{1}}参数。
编辑:datetime
tzinfo