Как преобразовать объект Python datetime в секунды
извиняюсь за простой вопрос... Я новичок в Python... Я искал вокруг, и ничего не работает.
у меня есть куча объектов datetime, и я хочу вычислить количество секунд с фиксированного времени в прошлом для каждого из них (например, с 1 января 1970 года).
import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)
это, кажется, только дифференциация между датами, которые имеют разные дни:
t.toordinal()
любая помощь очень ценится.
8 ответов:
для специальной даты 1 января 1970 года существует несколько вариантов.
для любой другой начальной даты нужно получить разницу между двумя датами в секундах. Вычитание двух дат дает
timedelta
объект, который по состоянию на Python 2.7 имеет
чтобы получить время Unix (секунды с 1 января 1970 года):
>>> import datetime, time >>> t = datetime.datetime(2011, 10, 21, 0, 0) >>> time.mktime(t.timetuple()) 1319148000.0
начиная с Python 3.3 это стало очень легко с
datetime.timestamp()
метод. Это, конечно, будет полезно только в том случае, если вам нужно количество секунд от 1970-01-01 UTC.from datetime import datetime dt = datetime.today() # Get timezone naive now seconds = dt.timestamp()
возвращаемое значение будет плавающим, представляющим даже доли секунды. Если datetime является наивным часовым поясом (как в примере выше), предполагается, что объект datetime представляет местное время, т. е. это будет количество секунд от текущего времени в вашем местоположении до 1970-01-01 Мирового.
возможно, вне темы: чтобы получить время UNIX / POSIX из datetime и преобразовать его обратно:
>>> import datetime, time >>> dt = datetime.datetime(2011, 10, 21, 0, 0) >>> s = time.mktime(dt.timetuple()) >>> s 1319148000.0 # and back >>> datetime.datetime.fromtimestamp(s) datetime.datetime(2011, 10, 21, 0, 0)
обратите внимание, что различные часовые пояса влияют на результаты, например, мой текущий TZ / DST возвращает:
>>> time.mktime(datetime.datetime(1970, 1, 1, 0, 0).timetuple()) -3600 # -1h
поэтому следует рассмотреть возможность нормализации к UTC с помощью UTC-версий функций.
Примечание этот предыдущий результат может быть использован для расчета смещения UTC вашего текущего часового пояса. В данном примере это +1h, т. е. UTC+0100.
ссылки:
- дата и время.дата.timetuple
- времени.mktime
- дата и время.значение datetime.fromtimestamp
- введение модуль объясняет время POSIX, 1970 эпоха, UTC, TZ, DST ...
из документов python:
timedelta.total_seconds()
возвращает общее количество секунд, содержащихся в длительности. Эквивалентно
(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
вычисляется с включенным истинным делением.
эта функция является новой в версии 2.7.
я попробовал стандартную библиотеку календарь.timegm и это работает довольно хорошо:
# convert a datetime to milliseconds since Epoch def datetime_to_utc_milliseconds(aDateTime): return int(calendar.timegm(aDateTime.timetuple())*1000)
Ref:https://docs.python.org/2/library/calendar.html#calendar.timegm
для преобразования объекта datetime, представляющего время в формате UTC, в метку времени POSIX:
from datetime import timezone seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()
чтобы преобразовать объект datetime, представляющий время в локальном часовом поясе, в метку времени POSIX:
import tzlocal # $ pip install tzlocal local_timezone = tzlocal.get_localzone() seconds_since_epoch = local_timezone.localize(local_time, is_dst=None).timestamp()
посмотреть Как конвертировать местное время в UTC в Python? если база данных tz доступна на данной платформе;решение только для stdlib может работать.
переходите по ссылкам, если вам нужны решения для
<3.3
Python версии.