将格式化的时间字符串转换为毫秒

时间:2015-09-16 10:30:27

标签: python datetime time

我正在尝试将'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)

是否有更好的方法以及如何使用时区

2 个答案:

答案 0 :(得分:3)

您的输入时间是UTC;除非您的本地时区始终为UTC,否则在此处使用time.mktime()是不正确的。

有两个步骤:

  1. 将输入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

  2. 将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