pytz utc转换

发布于 2021-01-29 17:55:33

将天真的时间和atzinfo转换为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)

不用说,这两种方法在相当多的时区中会产生不同的结果。

问题是-正确的方法是什么?

关注者
0
被浏览
38
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您的第一种方法似乎是已批准的方法,并且应支持DST。

    您可以将其缩短一点,因为 pytz.utc = pytz.timezone(’UTC’) ,但是您已经知道了:)

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看