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())