从一个本地时区到另一个本地时区的 Python 日期时间转换(+ 奖励 DST)

Posted

技术标签:

【中文标题】从一个本地时区到另一个本地时区的 Python 日期时间转换(+ 奖励 DST)【英文标题】:Python datetime conversions from one local timezone to another (+ bonus DST's) 【发布时间】:2016-05-22 23:07:35 【问题描述】:

我很难理解为什么我会得到我得到的结果。

我想尝试什么:

    采用两个时区,一个使用 DST,一个不使用。例如:罗马尼亚(dst)和委内瑞拉(无 dst)。

    对于有 dst 的时区,创建两个日期时间。一个在 dst 的区间内,一个不在。罗马尼亚 DST 间隔(4-10 / 4-10 月)。例如:

    from datetime import datetime
    from pytz import timezone
    
    tz1 = timezone('Europe/Bucharest')
    tz2 = timezone('America/Caracas')
    
    date1 = datetime(2016, 5, 5, 5, 0, 0, tzinfo=tz1)  # its in the dst interval (5 o'clock, summer - dst)
    date1 = datetime(2016, 12, 5, 5, 0, 0, tzinfo=tz1)  # isn't in the dst interval (5 o'clock, winter - no dst)
    
    x = date1.astimezone(tz2)
    y = date2.astimezone(tz2) 
    

    xy 不应该有不同的时间吗?因为 date1 在 DST 间隔内,所以当 datetime 不在 DST 间隔内时,5 点钟应该与 date2 中的 5 点钟表示不同的小时。

然而,xy 在转换为非 DST 时区时具有相同的小时。

感谢您提供的任何解释。

【问题讨论】:

【参考方案1】:

你不能使用datetime构造函数来使用pytz时区,你必须使用localize

date1 = tz1.localize(datetime(2016, 5, 5, 5, 0, 0))
date2 = tz1.localize(datetime(2016, 12, 5, 5, 0, 0))

来自documentation:

不幸的是,在许多时区使用标准日期时间构造函数的 tzinfo 参数“不起作用”。

【讨论】:

以上是关于从一个本地时区到另一个本地时区的 Python 日期时间转换(+ 奖励 DST)的主要内容,如果未能解决你的问题,请参考以下文章

python / pytz问题从本地时区转换为UTC然后返回

从时区和 UTC 时间,获取该时间点与本地时间的秒差

从时区偏移本地化日期时间(时区感知)

将其他时区转换为本地时区(偏移量)

python中datetime怎么设置时区

将日期从 GMT 时区转换为本地时区——使用 ISO_OFFSET_DATE_TIME