Как преобразовать объект datetime или date в метку времени POSIX в python? Существуют методы создания объекта datetime из метки времени, но я, похоже, не обнаружил очевидных способов сделать операцию противоположным способом.
Преобразование даты и времени в POSIX
Ответ 1
import time, datetime
d = datetime.datetime.now()
print time.mktime(d.timetuple())
Ответ 2
Для расчетов UTC calendar.timegm
является инверсией time.gmtime
.
import calendar, datetime
d = datetime.datetime.utcnow()
print calendar.timegm(d.timetuple())
Ответ 3
Обратите внимание, что теперь Python (3.5.2) включает встроенный метод для этого в объектах datetime
:
>>> import datetime
>>> now = datetime.datetime.now()
>>> now.timestamp() # Local time
1509315202.161655
>>> now.replace(tzinfo=datetime.timezone.utc).timestamp() # UTC
1509329602.161655
Ответ 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
Ответ 5
Наилучшее преобразование из почтовой даты/эпохи в метку даты и времени и наоборот:
this_time = datetime.datetime.utcnow() # datetime.datetime type
epoch_time = this_time.timestamp() # posix time or epoch time
this_time = datetime.datetime.fromtimestamp(epoch_time)