Маятниковый эквивалент метода Arrow's replace()?
У меня есть одна строка даты и времени UTC и одна пустая строка времени, которую я хотел бы сравнить.
pointTimeString = '2017-09-08T14:55:38Z'
startTimeString = '15:52'
Время в ту же дату, но в британское летнее время, а не в UTC.
Это работает, но чувствует себя немного хакером:
import pendulum
pointTime = pendulum.parse(pointTimeString)
startTime = pendulum.parse(pointTimeString[0:11]+startTimeString, tz='Europe/London')
if pointTime > startTime:
# Do stuff
Маятник использует дату, чтобы сделать вывод, что рассматриваемое время указано в BST, и устанавливает смещение UTC на +1:00. Почта Маятника raison d'être явно вызывает Arrow's replace()
метод как проблемный, но я не вижу эквивалента. Дело в том, что невозможно иметь replace()
эквивалент, который ведет себя правильно? Даже если это так, не существует ли способа скопировать экземпляр маятника при установке часов и минут на что-то другое?
Я надеюсь, что смогу сделать что-то вроде этого:
import pendulum
pointTime = pendulum.parse(pointTimeString)
startTime = pointTime.in_tz('Europe/London').from_format(startTimeString, "%H:%m")
if pointTime > startTime:
# Do stuff
Конечно, это не работает в данный момент: AttributeError: 'Pendulum' object has no attribute 'from_format'
2 ответа
Альтернатива.
>>> import pendulum
>>> pointTimeString = '2017-09-08T14:55:38Z'
>>> pointTime = pendulum.parse(pointTimeString)
>>> startTimeString = '15:52'
Создать экземпляр pendulum
только на дату от startTimeString
,
>>> tempTime = pendulum.parse(startTimeString)
Соберите полную дату из элементов pointTimeString
а также tempTime
,
>>> startTime = pendulum.create(pointTime.year, pointTime.month, pointTime.day, tempTime.hour, tempTime.minute, 0, 0, tz=pointTime.tz)
Проверьте результат.
>>> startTime
<Pendulum [2017-09-08T15:52:00+00:00]>
В частности, убедитесь, что часовые пояса были обработаны правильно.
>>> pointTime.tz
<Timezone [+00:00]>
>>> startTime.tz
<Timezone [+00:00]>
Не так аккуратно, как я искал, но это довольно выразительно и определенно кажется менее хакерским:
from datetime import datetime as dt
import pendulum
pointDT = pendulum.parse(pointTimeString)
startTime = dt.strptime(startTimeString, "%H:%M").time()
startDT = pendulum.instance(dt.combine(pointDT.date(), startTime), tz="Europe/London")
if pointDT > startDT:
# Do stuff
Вдохновлен ответом на вопрос на сайте Github проекта.