Я должен создать значение «Expires» через 5 минут в будущем, но я должен предоставить его в формате метки времени UNIX. У меня это пока что, но похоже на взлом.
def expires():
'''return a UNIX style timestamp representing 5 minutes from now'''
epoch = datetime.datetime(1970, 1, 1)
seconds_in_a_day = 60 * 60 * 24
five_minutes = datetime.timedelta(seconds=5*60)
five_minutes_from_now = datetime.datetime.now() + five_minutes
since_epoch = five_minutes_from_now - epoch
return since_epoch.days * seconds_in_a_day + since_epoch.seconds
Есть ли модуль или функция, которая выполняет преобразование метки времени для меня?
python
datetime
unix-timestamp
Даниэль Роден
источник
источник
Ответы:
Другой способ заключается в использовании
calendar.timegm
:Он также более переносим, чем
%s
флагstrftime
(который не работает в Windows).источник
calendar.timegm(future.utctimetuple())
. Это гарантирует, что время UTC передается вcalendar.timegm
.21600.0
секунды (6 часов) вместо 0.0 для TZ моей машины с Unixcalendar.timegm(datetime.datetime.utcnow().timetuple())
. Использование методаdatetime.datetime.now().utctimetuple()
не работает для меня (Python 3.2).Теперь в Python> = 3.3 вы можете просто вызвать метод timestamp (), чтобы получить метку времени как число с плавающей точкой.
источник
datetime.now()
) плох, потому что он поощряет использование наивных объектов даты и времени, которые представляют местное время, и может потерпеть неудачу во время переходов DST (из-за присущей неоднозначности). Вы могли бы использоватьts = datetime.now(timezone.utc).timestamp()
вместо этого.utcnow()
. Я привык работать на машинах, где часовой пояс установлен на UTC, но в этом фрагменте кода это не следует предполагать.Просто нашел это, и это еще короче.
источник
time.time()
может быть установлен обратно. Для создания значения «Истекает» через 5 минут в будущем вам может понадобитьсяtime.monotonic()
аналог в зависимости от вашего варианта использования.monotonic
использования зависит от вашего варианта использования, например,subprocess
модуль использует его для реализацииtimeout
опции.Это то, что вам нужно:
источник
mktime(dt.timetuple())
.datetime.now(timezone.utc).timestamp()
предоставленное @Tim Tisdall - решение в Python 3.3+. В противном случае(dt - epoch).total_seconds()
может быть использовано .Вы можете использовать,
datetime.strftime
чтобы получить время в форме Epoch, используя%s
строку формата:Примечание: это работает только под Linux, и этот метод не работает с часовыми поясами.
источник
ValueError: Invalid format string
).Вот менее сломанное
datetime
решение для преобразования из объекта datetime в posix timestamp:Подробности смотрите в разделе Преобразование datetime.date в метку времени UTC в Python .
источник
источник
Ключ должен гарантировать, что все даты, которые вы используете, находятся в часовом поясе utc, прежде чем вы начнете конвертировать. Смотрите http://pytz.sourceforge.net/, чтобы узнать, как это сделать правильно. Нормализуя до utc, вы устраняете неоднозначность переходов на летнее время. Затем вы можете безопасно использовать timedelta для расчета расстояния от эпохи Unix, а затем преобразовать в секунды или миллисекунды.
Обратите внимание, что полученная метка времени Unix сама находится в часовом поясе UTC. Если вы хотите увидеть метку времени в локализованном часовом поясе, вам нужно будет выполнить другое преобразование.
Также обратите внимание, что это будет работать только для дат после 1970 года.
источник
1970-01-01 00:00:00+00:00
). Чтобы получить наивный объект даты и времени в местном часовом поясе:datetime.fromtimestamp(ts)
Нижеследующее основано на ответах выше (плюс поправка на миллисекунды) и эмулируется
datetime.timestamp()
для Python 3 до 3.3, когда используются часовые пояса.Чтобы строго ответить на вопрос в том виде, в котором он был задан, вы бы хотели:
datetime_timestamp
является частью простой даты . Но если бы вы использовали этот пакет, вы, вероятно, набрали бы:который обрабатывает много других форматов / типов для my_datetime.
источник
источник
Обратите внимание, что решения с
timedelta.total_seconds()
работой на Python-2.7 +. Используйтеcalendar.timegm(future.utctimetuple())
для более низких версий Python.источник