Маятниковый эквивалент метода 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 проекта.

Другие вопросы по тегам