python - 手动构造日期时间对象时出现意外的时区偏移
问题描述
我在 Python 中手动构造一个 datetime 对象:
>>> import datetime
>>> import pytz
>>> dt = datetime.datetime(
... 2020, 4, 3, 12, 0, 0,
... tzinfo=pytz.timezone('America/Chicago')
... )
>>> str(dt)
'2020-04-03 12:00:00-05:51'
>>>
另一方面:
>>> naive = datetime.datetime(2020, 4, 3, 12, 0, 0,)
>>> pytz.timezone('America/Chicago').localize(naive)
datetime.datetime(2020, 4, 3, 12, 0, tzinfo=<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>)
>>> dt = pytz.timezone('America/Chicago').localize(naive)
>>> str(dt)
'2020-04-03 12:00:00-05:00'
>>>
为什么第一个代码片段中的时区偏移量为“-05:51”而第二个代码片段中的时区偏移量为“-05:00”。由于夏令时在 2020 年 4 月 3 日在美国/芝加哥有效,因此它们都应显示“-05:00”。
解决方案
您可以使用以下代码本地化日期时间:
dt = pytz.timezone('America/Chicago').localize(datetime.datetime(2020, 4, 3, 12, 0, 0))
str(dt)
输出是:
'2020-04-03 12:00:00-05:00'
推荐阅读
- django - 无法在 django 中访问 OneToOneField 的子项?
- carousel - AEM 6.3 上轮播的个性化
- javascript - 我有一个包含 n 个邮件 ID 的数组。我想按照它的域名排序
- sql - 使用 > 比较列时出错
- angular - Angular CLI 在构建之前修改 TS 文件?
- php - 我想在登录后将用户重定向到个人资料页面
- android - onDestroy 方法未在 android o 版本中调用
- sql - 使用执行流程任务将变量值传递到 .bat 文件
- angular - 如何在代码库中找到父组件 - angular 5?
- azure - Azure AD 和 Azure B2C 中的用户和组织管理