Як створити дату в Python з мілісекунд?


142

Я можу створити подібний об’єкт Date в Java за допомогою java.util.Date (мілісекунд) . Як створити порівнянне в Python?

Виділяє об'єкт Date та ініціалізує його для відображення вказаної кількості мілісекунд з моменту стандартного базового часу, відомого як "епоха", а саме 1 січня 1970 р., 00:00:00 GMT.

Відповіді:


215

Просто перетворіть його в мітку часу

datetime.datetime.fromtimestamp(ms/1000.0)

17
Примітка - в Python 3 (/) виконає поділ з плаваючою комою. Для виконання цілісного поділу використовуйте (//).
Джон Міллікін

3
Ви справді не хочете поплавкового поділу? Інакше ви втрачаєте будь-яку точність нижче 1 секунди (утримується у дробовій частині часової позначки). Краще використовувати ms / 1000.0 без усікання.
Брайан

4
Напевно, дата завжди завжди підтримує це? Якщо у нас є друга секунда точності, здається, неправильно її викидати. Якщо ми не зробимо ніякої шкоди - ми просто збережемо цю первісну точність.
Брайан

30
Щоб зберегти точність без використання поплавців, ви також можете зробити:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg

2
Ще одна проблема з цим рішенням: "fromtimestamp () може підвищити ValueError, якщо часова марка виходить за межі значень, підтримуваних функціями платформи C localtime () або gmtime (). Це звичайно, щоб це було обмежено роками в 1970 до 2038. " - як довго очікується ваш код ???
мійський гризун

12

Як що до цього? Я припускаю, що на нього можна розраховувати, щоб обробити дати до 1970 року і після 2038 року.

target_date_time_ms = 200000 # or whatever
base_datetime = datetime.datetime( 1970, 1, 1 )
delta = datetime.timedelta( 0, 0, 0, target_date_time_ms )
target_date = base_datetime + delta

як згадується у стандартній вкладці Python:

fromtimestamp () може підвищувати ValueError, якщо часова марка виходить за межі значень, підтримуваних функціями платформи C localtime () або gmtime (). Загальноприйнято, щоб це було обмежене на роки з 1970 по 2038 роки.


6
ви можете скористатисяutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs

9

Трохи важкий через використання панд, але працює:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.