Конвертировать дату, дату и время в метку времени - PullRequest
5 голосов
/ 03 мая 2010

Как я могу получить метку времени с точностью до миллисекунды из date или datetime в Python?

Существует огромное количество способов и способов сделать это, и мне интересно, какой из них наиболее питонский.

Ответы [ 3 ]

10 голосов
/ 17 ноября 2011

Следующее сработало для моих целей:

К дате и времени с отметки времени в миллисекундах

import datetime
timestamp #=> 1317912250955
dt = datetime.datetime.fromtimestamp(time/1000.0)
dt #=> datetime.datetime(2011, 10, 6, 10, 44, 10, 955000)

От метки времени до миллисекунды

import time
dt #=> datetime.datetime(2011, 10, 6, 10, 44, 10, 955000)
timestamp = int((time.mktime(dt.timetuple()) + dt.microsecond/1000000.0)*1000)
timestamp #=> 1317912250955
2 голосов
/ 06 февраля 2011

объекты даты в Python не сохраняют понятие времени настенных часов. Если вы хотите взять объект даты и получить представление с точностью до миллисекунды, это будет все 0.

Модуль datetime пропускает миллисекунды и поддерживает микросекунды в своем форматировании. Поэтому, когда вы печатаете дату или время в интерпретаторе, это последнее поле - микросекунда. Если вам нужны миллисекунды, вы можете разделить это поле на 1000.

Вот пара примеров из сеанса интерпретатора Python 3.2b2. Здесь есть некоторые дополнительные вещи, чтобы вы могли увидеть основной маршрут, который я выбрал, чтобы добраться до отметки времени. Это не должно считаться заменой для чтения документов :

>>> x = datetime.datetime.today()
>>> y = datetime.date.today()
>>> x
datetime.datetime(2011, 2, 6, 8, 2, 9, 465714)
>>> y
datetime.date(2011, 2, 6)
>>> y.strftime('%Y-%m-%d.%f')
'2011-02-06.000000'
>>> x
datetime.datetime(2011, 2, 6, 8, 2, 9, 465714)
>>> str(x)
'2011-02-06 08:02:09.465714'
>>> x.microsecond
465714
>>> x.time()
datetime.time(8, 2, 9, 465714)
>>> x.time().microsecond/1000
465.714   # milliseconds and microseconds.
>>> int(x.time().microsecond / 1000)
465  # milliseconds
>>> s = '{:02d}:{:02d}:{:02d}.{:3d}'.format(r.hour, r.minute, r.second, int(r.microsecond / 1000), '2s')
>>> s
'08:02:09.465'
0 голосов
/ 19 февраля 2011

Какой самый питонический способ зависит от того, что вы хотите, когда вы говорите «метка времени». Число или строка?

Для строк d.isoformat() самый простой. Для номеров, которые вы делаете:

time.mktime(d.timetuple()) + d.microsecond/1000000.0

Это предполагает datetime объектов. Я не уверен, что вы имеете в виду, когда говорите, что вам нужна метка времени с точностью до миллисекунды от date объектов. date объекты даже не имеют секунд, а тем более миллисекунд. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...