如何在Python中组合带时区的日期和时间?

15

我有一个日期和时间,我想在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偏移改变,本地时间仍保持不变? - Mark Ransom
我本以为,如果我有一个时间 MIDNIGHT = time(hour = 0, tzinfo = NYC_TIME),那么无论我将它放入哪个日期中,它都会保持午夜。显然,并非如此。 - Chris B.
1个回答

3

没有日期的时间必须假设它不处于夏令时期。一旦你给它加上日期,这种假设就可以被纠正。时区偏移量会改变,时间也会改变以保持相同的UTC等效性。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接