簡體   English   中英

以毫秒為單位將 python 日期時間轉換為時間戳

[英]Convert python datetime to timestamp in milliseconds

如何將人類可讀的時間(例如20.12.2016 09:38:42,76轉換為 Unix 時間戳(以毫秒為單位)?

在 Python 3 中,這可以分兩步完成:

  1. 將時間字符串轉換為datetime時間對象
  2. 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.

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