pytz and astimezone() cannot be applied to a naive datetime

Tampa picture Tampa · Sep 27, 2012 · Viewed 59.8k times · Source

I have a date and I need to make it time zone aware.

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)

I need to find if this is true:

print start_date>local_now

But I get this error.

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

I convert utc to tokyo with no issue. I need to make start_date timezone aware ad well in tokyo.

Thanks

Answer

Martijn Pieters picture Martijn Pieters · Sep 27, 2012

For pytz timezones, use their .localize() method to turn a naive datetime object into one with a timezone:

start_date = local_tz.localize(start_date)

For timezones without a DST transition, the .replace() method to attach a timezone to a naive datetime object should normally also work:

start_date = start_date.replace(tzinfo=local_tz)

See the localized times and date arithmetic of the pytz documentation for more details.