【问题标题】:Why timezone-aware datetime is different when running program on MacOS and on Ubuntu?为什么在 MacOS 和 Ubuntu 上运行程序时感知时区的日期时间不同?
【发布时间】:2022-01-26 07:10:44
【问题描述】:

以下代码在 MacOS 和 Ubuntu(AWS Ubuntu 2.0 EC2 实例)上运行时会产生不同的结果

import datetime
import pytz
dt = datetime.datetime(year=2020, month=12, day=3, hour=8, minute=30)
dt_aware = dt.astimezone(pytz.timezone('Europe/Paris'))
print(dt_aware)

在 MacOS BigSur 11.6 上,它返回:2020-12-03 00:30:00+01:00
在 Ubuntu 2.0 上,它返回:2020-12-03 09:30:00+01:00

在这两种情况下:

  • 使用 Python 3.8
  • 使用pytz 2020.4版本

结果不同的原因是什么?


编辑:我想将“2020/12/03 08:30”表示为巴黎的日期时间。所以我希望两者都返回2020-12-03 08:30:00+01:00

【问题讨论】:

  • 可能是因为您/您的 Mac 生活在不同的时区。你想达到什么目的?您要表示的实际时间戳是什么,巴黎的 8:30,或者您 tz 中的 8:30 在巴黎的时间?
  • 我想代表巴黎8:30。
  • 那么您需要在创建日期时间时了解时区,而不仅仅是事后更改 tz。
  • 你说得对,我应该做的是:dt_aware = pytz.timezone('Europe/Paris').localize(dt)

标签: python-3.x macos ubuntu python-datetime pytz


【解决方案1】:

这可能是因为 AWS 实例与您的 MacOS 机器不在同一时区。当您创建没有指定时区的 dateTime 时,它​​将使用基于您的机器/操作系统的默认时区。

然后您将其调整为欧洲巴黎,它会从默认时区更改为那个。

因此,AWS 实例可能采用 UTC,与巴黎仅相差一个,因此 8 变为 9。

您的 MacOS 可能位于美国某个地方(太平洋?),距 UTC 8 小时,距巴黎 9 小时。因此,当设置为巴黎时,最终会有 9 小时的总差异。

【讨论】:

  • 没错,我的 Mac 在太平洋地区
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 2019-01-18
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多