我想获取一个时区的真实偏移量。
我的问题:
TimeZone tz = TimeZone.getTimeZone("America/Toronto");
int test = tz.getRawOffset();
test = -18000000
-18000000/1000/3600 = -5
我看到多伦多在UTC-4上。
它写在文档上,该方法返回brut偏移量。
但是我如何获得真实的偏移量?
答案 0 :(得分:3)
getRawOffset
不考虑DST。它反映了标准时间。从文档中:
以毫秒为单位返回添加到UTC以获得在该时区中的标准时间的时间。 由于此值不受夏时制的影响,因此称为原始偏移。
多伦多目前正在遵守夏令时(直到11月4日),因此其当前的UTC偏移为-4小时,但这是-5小时(标准)和+1小时DST。
现在那里有一个不正确的假设:时区永远不会更改其标准时间。 java.util.TimeZone
是一个相对古老的原始表示形式;最好改用java.time.ZoneId
和其他java.time
软件包。
如果必须使用java.util.TimeZone
,然后调用getOffset(long)
以获取特定时间点的UTC偏移量。
答案 1 :(得分:0)
不要使用getRawOffset
使用:tz.getOffset(new Date().getTime()) / 1000 / 3600