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

时间:2016-02-11 22:58:08

标签: python datetime timezone dst pytz

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

我想尝试一下:

  1. 选择两个时区,一个使用DST,另一个不使用。例如:罗马尼亚(dst)和委内瑞拉(没有dst)。

  2. 对于具有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) 
    
  3. xy不应该有不同的时间吗?因为date1在DST间隔中,所以当日期时间不在DST间隔时,5点应该表示与date2中的5点不同的小时。

  4. 然而,当转换为无DST时区时,xy都有相同的小时。

    感谢您提供的任何解释。

1 个答案:

答案 0 :(得分:4)

您无法使用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参数''与pytz不起作用。