[英]Convert python datetime to timestamp in milliseconds
如何將人類可讀的時間(例如20.12.2016 09:38:42,76
轉換為 Unix 時間戳(以毫秒為單位)?
在 Python 3 中,這可以分兩步完成:
datetime
時間對象datetime
對象的時間戳乘以 1000 以將其轉換為毫秒。例如像這樣:
from datetime import datetime
dt_obj = datetime.strptime('20.12.2016 09:38:42,76',
'%d.%m.%Y %H:%M:%S,%f')
millisec = dt_obj.timestamp() * 1000
print(millisec)
輸出:
1482223122760.0
strptime
接受您的時間字符串和格式字符串作為輸入。 時間字符串(第一個參數)指定您實際想要轉換為datetime
時間對象的內容。 格式字符串(第二個參數)指定您傳遞的字符串的實際格式。
以下是官方文檔中格式說明符的解釋:
%d
- 以零填充十進制數表示的月份中的日期。%m
- 以零填充十進制數表示的月份。%Y
- 年份,世紀為十進制數%H
- 小時(24 小時制),用零填充的十進制數表示。%M
- 用零填充的十進制數表示的分鍾。%S
- 秒作為零填充十進制數。%f
- 微秒作為十進制數,零填充到 6 位。對於那些在不解析和丟失毫秒的情況下搜索答案的人,給定dt_obj
是一個日期時間:
僅限python3,優雅
int(dt_obj.timestamp() * 1000)
python2和python3都兼容:
import time
int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)
對於 Python2.7 - 修改 MYGz 的答案以不去除毫秒:
from datetime import datetime
d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s.%f')
d_in_ms = int(float(d)*1000)
print(d_in_ms)
print(datetime.fromtimestamp(float(d)))
輸出:
1482248322760
2016-12-20 09:38:42.760000
您需要使用strptime解析您的時間格式。
>>> import time
>>> from datetime import datetime
>>> ts, ms = '20.12.2016 09:38:42,76'.split(',')
>>> ts
'20.12.2016 09:38:42'
>>> ms
'76'
>>> dt = datetime.strptime(ts, '%d.%m.%Y %H:%M:%S')
>>> time.mktime(dt.timetuple())*1000 + int(ms)*10
1482223122760.0
對於 Python2.7
您可以將其格式化為秒,然后乘以 1000 以轉換為毫秒。
from datetime import datetime
d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s')
d_in_ms = int(d)*1000
print(d_in_ms)
print(datetime.fromtimestamp(float(d)))
輸出:
1482206922000
2016-12-20 09:38:42
很多這些答案都沒有保留日期時間的毫秒數。 這對我有用
def datetime_to_ms_epoch(dt):
microseconds = time.mktime(dt.timetuple()) * 1000000 + dt.microsecond
return int(round(microseconds / float(1000)))
如標題所示,簡單的 python 2.7 / 3 解決方案,用於將 python 日期時間轉換為時間戳(如 int)。 如果您的輸入是字符串,請使用 datetime.strptime 將字符串轉換為日期時間對象。
from datetime import datetime
dt_obj = datetime.utcnow() # input datetime object
毫秒
int(float(dt_obj.strftime('%s.%f')) * 1e3)
1656096296215
微秒
int(float(dt_obj.strftime('%s.%f')) * 1e6)
1656096296215242
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.