【问题标题】:pytz: Why do these different methods give different UTC offsets?pytz:为什么这些不同的方法会给出不同的 UTC 偏移量?
【发布时间】:2011-07-20 08:34:48
【问题描述】:

当使用 pytz 在特定时区创建 datetime 对象时,我会得到不同的 UTC 偏移量,具体取决于我使用的是 datetime.datetime() 还是 datetime.datetime.now()

now() 似乎给出了正确的时区 UTC 偏移量,datetime() 给出了一个我不认识的偏移量。

为什么它们不同? datetime() 分配的偏移量有什么意义?

这是我的代码:

import datetime
import pytz

la_paz = pytz.timezone('America/La_Paz')

a = datetime.datetime.now(la_paz)
print a, a.utcoffset()

# 2011-03-22 05:30:13-04:00 -1 day, 20:00:00
# -4 hours is the correct UTC offset for La Paz

b = datetime.datetime(2011, 03, 22, 5, 30, tzinfo=la_paz)
print b, b.utcoffset()

# 2011-03-22 05:30:00-04:33 -1 day, 19:27:00
# What is the significance of -4:33?

【问题讨论】:

    标签: python timezone pytz


    【解决方案1】:

    来自pytz 文档:

    该库仅支持两种构建本地化时间的方法。第一种是使用pytz库提供的localize()方法。这用于本地化一个简单的日期时间(没有时区信息的日期时间):

    >>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
    >>> print loc_dt.strftime(fmt)
    2002-10-27 06:00:00 EST-0500
    

    第二种构建本地化时间的方法是使用标准 astimezone() 方法转换现有的本地化时间:

    >>> ams_dt = loc_dt.astimezone(amsterdam)
    >>> ams_dt.strftime(fmt)
    '2002-10-27 12:00:00 CET+0100'
    

    或者换一种说法:

    b = datetime.datetime(2011, 03, 22, 5, 30, tzinfo=la_paz)
    

    pytz 不支持

    【讨论】:

      【解决方案2】:

      似乎datetime() 将默认使用该地区的第一个记录时区,并且在许多情况下(例如在拉巴斯),这是旧的并且不再有效。

      日期时间必须先天真地创建,然后像这样本地化:

      b = la_paz.localize(datetime.datetime(2011, 03, 22, 5, 30))
      print b, b.utcoffset()
      

      now() 似乎会自动进行本地化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        • 2011-11-12
        • 2016-07-19
        • 1970-01-01
        • 2016-05-04
        • 2015-11-16
        • 2019-07-03
        相关资源
        最近更新 更多