【问题标题】:Timedelta returned by tzinfo objecttzinfo 对象返回的时间增量
【发布时间】:2020-12-20 18:08:24
【问题描述】:

我正在研究 Python 中的日期时间,并且已经了解了时区。我用timedelta 创建了一个太平洋timezone

pacific = datetime.timezone(datetime.timedelta(hours=8))

然后,我创建了一个 aware datetime 对象,我使用 tzinfo 对象将其转换为 pacific

aware = datetime.datetime(2020,12,20,11, tzinfo=pacific)

aware 返回timedelta,我想知道它在计算什么。我是-1, 57600

print(aware)

>>> datetime.datetime(2020,12,20,11,0, tzinfo=datetime.timezone(datetime.timedelta(-1,57600))

【问题讨论】:

  • 在您的代码示例中,它显示 hours=8 - US/Pacific 是 UTC-8;你的意思是hours=-8?顺便说一句,您创建的是与 UTC 的静态偏移量,静态意味着它,例如不会有夏令时。查看 Python 的 zoneinfo 模块,了解更多“高级”时区处理。
  • 是的,应该是 -8。那里有一点拼写错误。感谢您提供的链接,我正在学习的材料非常基础,因此会有所帮助。

标签: python timezone


【解决方案1】:

这里发生的事情是有两种方式来表示时区偏移。

您可以用 28800 秒的时间增量来表示它(比 UTC 时间晚 8 小时)。或者等效地,您可以通过返回 1 天(-1)然后添加 57600 秒来表示它。这也使您比太平洋的 UTC 晚 28800 秒(8 小时)。

【讨论】:

  • 感谢您的回答。我永远不会想到这一点!
  • 您介意投票/接受吗?谢谢,最大
  • 我认为这是不正确的。美国/太平洋时间为 UTC-8,因此正确的静态 tz 为 datetime.timezone(datetime.timedelta(hours=-8))。除此之外,days=-1, seconds=57600 正是 Python 表示 (__repr__) -8 小时的时间增量的方式。
  • 你说得对,应该是-8。用户只需要一般理解的帮助。我觉得没那么重要
猜你喜欢
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2014-10-15
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多