Why does datetime.datetime.utcnow() not contain timezone information?
datetime, python, timezone, utc
Solution
That means it is timezone naive, so you can't use it with `datetime.astimezone`
you can give it a timezone like this
import pytz # 3rd party: $ pip install pytz
u = datetime.utcnow()
u = u.replace(tzinfo=pytz.utc) #NOTE: it works only with a fixed utc offset
now you can change timezones
print(u.astimezone(pytz.timezone("America/New_York")))
To get the current time in a given timezone, you could pass tzinfo to `datetime.now()` directly:
#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz
print(datetime.now(pytz.timezone("America/New_York")))
It works for any timezone including those that observe daylight saving time (DST) i.e., it works for timezones that may have different utc offsets at different times (non-fixed utc offset). Don't use `tz.localize(datetime.now())` -- it may fail during end-of-DST transition when the local time is ambiguous.
Problem
``` datetime.datetime.utcnow() ``` Why does this `datetime` not have any timezone info given that it is explicitly a UTC `datetime`? I would expect that this would contain `tzinfo`.