如何在 Python 中结合时区感知日期和时间?

Posted

技术标签:

【中文标题】如何在 Python 中结合时区感知日期和时间?【英文标题】:How do I combine a timezone aware date and time in Python? 【发布时间】:2012-06-30 11:57:42 【问题描述】:

我有一个日期和时间,我试图在 Python 中组合。时间是时区感知的。

但是,当我尝试合并它们时,我得到了错误的时间。

import pytz
from datetime import time, date
NYC_TIME = pytz.timezone('America/New_York')

start_date = date(2012, 7, 7)
start_time = time(hour = 0, tzinfo = NYC_TIME)
combined = datetime.combine(start_date, start_time)
print combined
print NYC_TIME.normalize(combined)

这将打印2012-07-07 00:00:00-05:00,标准化为2012-07-07 01:00:00-04:00。为什么会这样?如何避免?

【问题讨论】:

我假设通过“避免它”您希望本地时间保持固定,即使 UTC 偏移量因夏令时而发生变化? 我期待,如果我有时间MIDNIGHT = time(hour = 0, tzinfo = NYC_TIME),无论我将它插入哪个日期,它都会保持在午夜。显然,事实并非如此。 【参考方案1】:

没有附加日期的时间必须假定它不在夏令时。一旦你给它附加了一个日期,这个假设就可以被纠正。区域偏移量发生变化,时间也发生变化以保持相同的 UTC 等效值。

【讨论】:

这很奇怪,因为如果你比较两个没有静态偏移的时区感知时间,它们会引发天真的时区错误——也就是说,它们拒绝假设它们是否在夏令时与否。

以上是关于如何在 Python 中结合时区感知日期和时间?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 给定一个时区感知的日期时间对象,我如何获得一个时区朴素的 UTC 日期时间对象?

如何在 SqlAlchemy / Mysql 中存储时区感知日期时间值?

python - 如何在没有dateutil的情况下将时区感知字符串转换为Python中的日期时间?

在 Python 中获取随机时区感知日期时间

如何在 django 中获取时区感知日期?

Python 中的日期可以感知时区吗?