如何在(milli)秒内从UTC的偏移量构造一个datetime tzinfo对象?

时间:2017-02-02 11:40:09

标签: python date datetime timezone pytz

我正在构建一个Python应用程序,它将从Android手机接收时区信息,我想将其转换为datetime tzinfo对象(例如,由pytz实现)

这个小Java程序显示了TimeZone可用格式的“样本”:

import java.util.TimeZone;

public class GetLocalTimeZone {

   public static void main(String []args) {
        TimeZone local_tz = TimeZone.getDefault();
        System.out.println(local_tz.getDisplayName());
        System.out.println(local_tz.getID());
        System.out.println(local_tz.getRawOffset());
   }
}

打印

Central European Time
Europe/Amsterdam
3600000

根据TimeZone documentationgetRawOffset()函数返回“添加到UTC以获得此时区标准时间的时间量(以毫秒为单位)”。这似乎是实例化datetime.tzinfo对象的一个​​很好的起点。

问题是虽然我可以使用getID()方法的输出实例化一个,例如

import pytz
amsterdam = pytz.timezone('Europe/Amsterdam')

我不确定如何使用数字偏移实例化timezone,即使我将其转换为小时。例如,

pytz.timezone('+01:00')

产生UnknownTimeZoneError。我如何从UTC的偏移量(以毫秒为单位)创建datetime.tzinfo对象? (我也对其他实现开放,例如ArrowPendulum)。

1 个答案:

答案 0 :(得分:1)

您的问题是时区包括偏移量和夏令时信息。

可能存在具有相同偏移但时间节省不同的时区,因此单独的偏移量不足以识别时区。

如果可能,您应该使用显示名称和/或ID。

如果你不能这样做,最好的办法是列举所有时区,并根据哪些偏移量至少在一年中的部分时间内获得一个候选名单。然后你将不得不以某种方式选择一个。