Арифметика даты и времени с дневными периодами - PullRequest
0 голосов
/ 03 мая 2020

Учитывая TZ-осведомленный datetime, я хочу найти дату и время того же времени предыдущего дня в том же часовом поясе (не обязательно с таким же смещением).

Я нашел решение ниже ,

tz = pytz.timezone("Europe/Paris")
myDatetime = tz.localize(datetime.datetime(year=2019, month=10, day=27, hour=22))
print(myDatetime) # 2019-10-27 22:00:00+01:00

# separate into date and time
mydate = myDatetime.date()
time = myDatetime.time()
# find previous day
previous_date = mydate - datetime.timedelta(days=1)
print(previous_date) # 2019-10-26

previous_day = tz.localize(datetime.datetime.combine(date=previous_date, time=time))
print(previous_day) # 2019-10-26 22:00:00+02:00

Существует ли более простой, проверенный и более стандартный способ сделать то же самое?

Библиотека?

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Я думаю, что это то, что вы ищете.

myNewDatetime = tz.localize((myDatetime.replace(tzinfo=None) + datetime.timedelta(days=-1)))

В качестве хедз-апа я думаю, что вы должны были сделать свой вопрос немного более явным, поскольку проблема действительно связана с летним временем (у меня было Понятия не имею, что вы имели в виду под смещением, но понял это по дате, которую вы выбрали).

0 голосов
/ 03 мая 2020

Решение:

tz = pytz.timezone("Europe/Paris")
myDatetime = tz.localize(datetime.datetime(year=2019, month=10, day=27, hour=22))
print(myDatetime) # 2019-10-27 22:00:00+01:00

previous_date = myDatetime - datetime.timedelta(days=1) 
print(previous_date) #2019-10-26 22:00:00+01:00

Надеюсь, что это ваше требование.

...