【问题标题】:Timezone offsets not printing to a rounded hour时区偏移量未打印到四舍五入的小时
【发布时间】:2021-01-22 01:11:01
【问题描述】:

当我运行以下代码时;

tz_Pacific = pytz.timezone('US/Pacific')
tz_Tasmania = pytz.timezone('Australia/Tasmania')

time1 = datetime(2020, 10, 7, 18, 0, 0, tzinfo=tz_Pacific)
time2 = datetime(2020, 10, 7, 14, 20, 21, tzinfo=tz_Tasmania)

print(time1)
print(time2)

我得到以下输出;

2020-10-07 18:00:00-07:53

2020-10-07 14:20:21+09:49

为什么 tz 偏移量分别为 -07:53 和 +09:49?

【问题讨论】:

  • 我注意到这些是 IANA 数据库中第一次转换之前的偏移量(美国/太平洋地区为 1883 年,澳大利亚/塔斯马尼亚州为 1895 年)。我对pytz一无所知,但它似乎忽略了你提供的日期......
  • @JonSkeet:我认为你的怀疑是正确的。这是pytz 的常见问题;关于 SO 有 很多 的问题,人们偶然发现了 pytz API 的这个“警告”。 The docs 很清楚如何建立本地化时间 - 但很难发现警告标志告诉你如果使用两种有效方法之一会发生什么。

标签: python datetime timezone pytz


【解决方案1】:

为什么用pytz 得到这些“奇怪”的偏移量?这些是各个时区数据库中的第一个条目。使用pytz,如果您不进行本地化,这些将不会调整为您的日期时间对象的时间。这是 Paul Ganssle 的 nice blog post,提供了更多见解。

from datetime import datetime
import pytz

tz_Pacific = pytz.timezone('US/Pacific')
tz_Tasmania = pytz.timezone('Australia/Tasmania')

# note the LMT for local mean time:
print(repr(tz_Pacific))
print(repr(tz_Tasmania))
# <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD> 
# <DstTzInfo 'Australia/Tasmania' LMT+9:49:00 STD>

# correctly localized you get
time1 = tz_Pacific.localize(datetime(2020, 10, 7, 18, 0, 0))
time2 = tz_Tasmania.localize(datetime(2020, 10, 7, 14, 20, 21))
print(time1)
print(time2)
# 2020-10-07 18:00:00-07:00
# 2020-10-07 14:20:21+11:00

补充说明:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多