我正在构建一个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 documentation,getRawOffset()
函数返回“添加到UTC以获得此时区标准时间的时间量(以毫秒为单位)”。这似乎是实例化datetime.tzinfo
对象的一个很好的起点。
问题是虽然我可以使用getID()
方法的输出实例化一个,例如
import pytz
amsterdam = pytz.timezone('Europe/Amsterdam')
我不确定如何使用数字偏移实例化timezone
,即使我将其转换为小时。例如,
pytz.timezone('+01:00')
产生UnknownTimeZoneError
。我如何从UTC的偏移量(以毫秒为单位)创建datetime.tzinfo
对象? (我也对其他实现开放,例如Arrow和Pendulum)。
答案 0 :(得分:1)
您的问题是时区包括偏移量和夏令时信息。
可能存在具有相同偏移但时间节省不同的时区,因此单独的偏移量不足以识别时区。
如果可能,您应该使用显示名称和/或ID。
如果你不能这样做,最好的办法是列举所有时区,并根据哪些偏移量至少在一年中的部分时间内获得一个候选名单。然后你将不得不以某种方式选择一个。