【问题标题】:dst of python datetime object (again)python datetime对象的dst(再次)
【发布时间】:2015-01-19 21:24:25
【问题描述】:

在python3.4中,如果我创建了一个时区感知的日期时间对象,我如何确定给定的日期是夏令时(dst)还是冬令时?

例子:

local_time = pytz.timezone('Europe/Berlin')
time_winter = datetime.datetime(2014, 11, 26, 10, tzinfo=local_time)
time_summer = datetime.datetime(2014, 7, 26, 10, tzinfo=local_time)

在这两种情况下 .dst() 都会返回:

>>> datetime.timedelta(0)

此外 .tzname() 和 .tzinfo() 总是相同的。

原则上,对象知道时区和夏令时,但只是有时:

cet_winter = pytz.timezone('CET')    #    CET is without dst

datetime.datetime(2014,7 , 26, 10, tzinfo=local_time).astimezone(cet_winter)
>>> datetime.datetime(2014, 7, 26, 11, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)


datetime.datetime(2014,11, 26, 10, tzinfo=local_time).astimezone(cet_winter)
>>> datetime.datetime(2014, 11, 26, 10, 0, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)

这里显示了夏季和冬季时间之间的差异...... 对UTC做同样的事情,它不会工作......

datetime.datetime(2014,11, 26, 10, tzinfo=local_time).astimezone(pytz.timezone('UTC'))
>>> datetime.datetime(2014, 11, 26, 9, 0, tzinfo=<UTC>)

datetime.datetime(2014,11, 26, 10, tzinfo=local_time).astimezone(pytz.timezone('UTC'))
>>> datetime.datetime(2014, 11, 26, 9, 0, tzinfo=<UTC>)

我是否从根本上错过了某些东西,还是需要使时区对象与时间相关?

【问题讨论】:

标签: datetime python-3.x


【解决方案1】:

您需要在时区对象上使用localize

>>> local_time.localize(datetime.datetime(2014, 11, 26, 10)).dst()
datetime.timedelta(0)
>>> local_time.localize(datetime.datetime(2014, 7, 26, 10)).dst()
datetime.timedelta(0, 3600)

.localize().normalize() 都用于确保正确完成转换并将 DST 考虑在内(请参阅 examples)。

【讨论】:

  • 只是补充一下,因为我首先误解了:如果您的时区有 dst,您可能不会将您的时区简单地设置为 tz 参数,但您必须通过 localize 传递它。我的问题中的初始化是错误的,它需要是: time_winter = local_time.localize(datetime.datetime(2014, 11, 26, 10))
猜你喜欢
  • 2012-10-26
  • 2012-08-29
  • 2020-07-17
  • 2011-12-30
  • 1970-01-01
  • 2016-10-09
  • 2017-05-28
  • 2015-12-02
  • 2022-01-24
相关资源
最近更新 更多