将原始时间和tzinfo
转换为UTC时间的正确方法是什么?
假设我有:
d = datetime(2009, 8, 31, 22, 30, 30)
tz = timezone('US/Pacific')
第一种方式,pytz启发:
d_tz = tz.normalize(tz.localize(d))
utc = pytz.timezone('UTC')
d_utc = d_tz.astimezone(utc)
第二条路,从UTCDateTimeField
def utc_from_localtime(dt, tz):
dt = dt.replace(tzinfo=tz)
_dt = tz.normalize(dt)
if dt.tzinfo != _dt.tzinfo:
# Houston, we have a problem...
# find out which one has a dst offset
if _dt.tzinfo.dst(_dt):
_dt -= _dt.tzinfo.dst(_dt)
else:
_dt += dt.tzinfo.dst(dt)
return _dt.astimezone(pytz.utc)
不用说,这两种方法在相当多的时区会产生不同的结果。
问题是-什么是正确的方法?
This answer enumerates some issues with converting a local time to UTC:
使用第一种方法。没有理由重新发明时区转换的轮子
你的第一个方法似乎是被批准的,应该是DST意识到的。
你可以把它缩短一点,因为pytz.utc=pytz.timezone('utc'),但你已经知道了:)
相关问题 更多 >
编程相关推荐