What is the right way to convert a naive time and a tzinfo
into an UTC time?
Say I have:
d = datetime(2009, 8, 31, 22, 30, 30)
tz = timezone(\'U
Your first method seems to be the approved one, and should be DST-aware.
You could shorten it a tiny bit, since pytz.utc = pytz.timezone('UTC'), but you knew that already :)
tz = timezone('US/Pacific')
def toUTC(d):
return tz.normalize(tz.localize(d)).astimezone(pytz.utc)
print "Test: ", datetime.datetime.utcnow(), " = ", toUTC(datetime.datetime.now())
import pytz
from django.utils import timezone
tz = pytz.timezone('America/Los_Angeles')
time = tz.normalize(timezone.now())
What is the right way to convert a naive time and a tzinfo into an utc time?
This answer enumerates some issues with converting a local time to UTC:
from datetime import datetime
import pytz # $ pip install pytz
d = datetime(2009, 8, 31, 22, 30, 30)
tz = pytz.timezone('US/Pacific')
# a) raise exception for non-existent or ambiguous times
aware_d = tz.localize(d, is_dst=None)
## b) assume standard time, adjust non-existent times
#aware_d = tz.normalize(tz.localize(d, is_dst=False))
## c) assume DST is in effect, adjust non-existent times
#aware_d = tz.normalize(tz.localize(naive_d, is_dst=True))
# convert to UTC
utc_d = aware_d.astimezone(pytz.utc)
Use the first method. There's no reason to reinvent the wheel of timezone conversion