2008-10-31 3 views
40

Как преобразовать объект datetime или date в метку времени POSIX в python? Существуют методы создания объекта datetime из метки времени, но я, похоже, не нахожу каких-либо очевидных способов сделать операцию противоположным способом.Преобразование даты и времени в POSIX

ответ

48
import time, datetime 

d = datetime.datetime.now() 
print time.mktime(d.timetuple()) 
+0

Спасибо. Я знал, что это должно быть чем-то глупо простым, но я не мог понять. – 2008-10-31 21:53:12

+0

Кажется, что в зависимости от платформы время не имеет метода mktime – Tirno 2009-03-19 22:05:51

+5

Обратите внимание, что это дает местное время, а не UTC. Для UTC см. Ответ [fixermark] (http://stackoverflow.com/q/5872022/60075). – 2011-11-23 23:44:04

21

Для расчетов UTC, calendar.timegm является обратным time.gmtime.

import calendar, datetime 
d = datetime.datetime.utcnow() 
print calendar.timegm(d.timetuple()) 
4

В Python, time.time() может возвращать секунды как число с плавающей точкой, который включает в себя десятичную компонент с микросекунд. Чтобы преобразовать дату-время обратно в это представление, вам нужно добавить компонент микросекунды, потому что прямой timetuple не включает его.

import time, datetime 

posix_now = time.time() 

d = datetime.datetime.fromtimestamp(posix_now) 
no_microseconds_time = time.mktime(d.timetuple()) 
has_microseconds_time = time.mktime(d.timetuple()) + d.microsecond * 0.000001 

print posix_now 
print no_microseconds_time 
print has_microseconds_time 
2

Обратите внимание, что Python сейчас (3.5.2) включает в себя built-in method для этого в datetime объектов:

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> now.timestamp() # Local time 
1509315202.161655 
>>> now.replace(tzinfo=datetime.timezone.utc).timestamp() # UTC 
1509329602.161655 
Смежные вопросы