Подтвердить что ты не робот

Pytz и astimezone() не могут применяться к наивному дате

У меня есть дата, и мне нужно сообщить ей часовую зону.

local_tz = timezone('Asia/Tokyo')
start_date = '2012-09-27'
start_date = datetime.strptime(start_date, "%Y-%m-%d")   
start_date = start_date.astimezone(local_tz)


now_utc = datetime.now(timezone('UTC'))
local_now = now_utc.astimezone(local_tz)

Мне нужно найти, верно ли это:

print start_date>local_now

Но я получаю эту ошибку.

   start_date = start_date.astimezone(local_tz)
   ValueError: astimezone() cannot be applied to a naive datetime

Я конвертирую utc в tokyo без проблем. Мне нужно сделать объявление с часовым поясом start_date хорошо в tokyo.

Спасибо

4b9b3361

Ответ 1

Для pytz часовых поясов используйте метод .localize(), чтобы превратить наивный объект datetime в единицу с часовым поясом:

start_date = local_tz.localize(start_date)

Для часовых поясов без перехода на летнее время метод .replace() для прикрепления часового пояса к наивному объекту datetime должен также работать:

start_date = start_date.replace(tzinfo=local_tz)

Подробнее см. локализованное время и арифметику дат документации pytz.

Ответ 2

Вы можете использовать local_tz.localize(naive_dt, is_dst=None), чтобы преобразовать наивный объект datetime в соответствующий временной зоне.

from datetime import datetime
import pytz

local_tz = pytz.timezone('Asia/Tokyo')

start_date = local_tz.localize(datetime(2012, 9, 27), is_dst=None)
now_utc = datetime.utcnow().replace(tzinfo=pytz.utc)

print start_date > now_utc

is_dst=None заставляет .localize() создавать исключение, если заданное локальное время неоднозначно.