2010-05-03 6 views

ответ

2

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

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

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

>>> 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

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

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

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

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

+0

Примечание. t unix timestamps традиционно UTC, а mktime() зависит от времени. Используйте calendar.timegm() (см. Http://stackoverflow.com/questions/2956886/python-calendar-timegm-vs-time-mktime). –

8

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

Для DateTime из миллисекунды метки времени

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

От DateTime миллисекунды TIMESTAMP

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 
+3

Осторожно, последняя операция интерпретирует данное время как локальное время, а не UTC! – Michael

Смежные вопросы