簡體   English   中英

將格式化的時間字符串轉換為毫秒

[英]Converting a formatted time string to milliseconds

我想將'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將數字四舍五入到最接近的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)

有沒有更好的方法來做到這一點 ,我如何使用時區

您的輸入時間是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") 

    你已經完成了。 另請參閱將RFC 3339時間轉換為標准Python時間戳

  2. 將UTC時間轉換為以毫秒表示的POSIX時間

     from datetime import datetime, timedelta milliseconds = (utc_time - datetime(1970, 1, 1)) // timedelta(milliseconds=1) # -> 1442337209380 

    對於適用於Python 2.6-3 +的版本,請參閱如何在Python中將epoch(unix時間)之后的datetime對象轉換為毫秒?

不幸的是,在timetuple沒有毫秒。 但是,您不需要timetuple 對於時間戳,只需致電

datetime.strptime(...).timestamp()

至於時區,請查看datetime tzinfo參數。

編輯tzinfo

>>> d
datetime.datetime(2015, 9, 15, 17, 13, 29, 380000)
>>> d.timestamp()
1442330009.38
>>> import pytz
>>> d.replace(tzinfo=pytz.timezone("US/Eastern")).timestamp()
1442355209.38

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM