我想构建一个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
根据时区文档,getRawOffset()
函数返回"添加到UTC以获得该时区的标准时间的时间量(以毫秒为单位)"。这似乎是实例化datetime.tzinfo
对象的一个很好的起点。
问题是,尽管我可以使用getID()
方法的输出实例化一个,例如
import pytz
amsterdam = pytz.timezone('Europe/Amsterdam')
我不知道如何实例化具有数字偏移量的timezone
,即使我将其转换为小时。例如,
pytz.timezone('+01:00')
得到CCD_ 6。如何从UTC的偏移量(以毫秒为单位)创建datetime.tzinfo
对象?(我也对其他实现持开放态度,例如Arrow和Pendulum)。
您的问题是时区同时包含偏移量和夏令时信息。
可能存在偏移量相同但夏令时不同的时区,因此仅偏移量不足以识别时区。
如果可能,您应该使用显示名称和/或ID。
如果你做不到这一点,你最好的办法是列举所有时区,并根据一年中至少有一部分时间有时差的时区来获得入围名单。那你就得选一个了。