java中的TimeZone.getDSTSavings()是否总是返回正值?

时间:2015-03-12 12:51:44

标签: java android

java中的TimeZone.getDSTSavings()是否总是返回正值或负值?

我试过这种方式

        long millisecondsForGivenDateTime = 0l;
        if (TimeZone.getTimeZone(strTZID).inDaylightTime(
                new Date(millisecondsForGivenDateTime))) {
            millisecondsForGivenDateTime = (millisecondsForGivenDateTime + TimeZone
                    .getTimeZone(strTZID).getDSTSavings());
        }

这里strTZID是动态传递给该函数的时区id,而millisecondsForGivenDateTime包含动态值。

我总是得到3600000或0韩元这个功能返回-3600000?

2 个答案:

答案 0 :(得分:1)

理论上它可以返回负值 - 如果你使用的是TimeZone子类,夏令时会导致时钟返回而不是前进。

我非常怀疑你会在野外看到它,虽然我已经在Windows时区数据库中看到类似的东西来解决Windows无法应对时区变化的事实他们的标准UTC偏移...如果一个区域从UTC + 5变为UTC + 6(例如标准时间) - 并且停止观察DST - 区域数据表明“DST”实际上是-1小时,并且刚刚倒转它实际上是人类所期望的。我已经在俄罗斯时区看过这个,虽然我相信现在数据更清晰了。

桌面JRE阻止您构建具有负DST节省的SimpleTimeZone,但我不知道Android中是否存在相同(未记录的)限制。您总是可以创建自己的TimeZone子类,但 会返回负偏移量。

答案 1 :(得分:0)

对于使用夏令时的时区,此类返回3600000(1小时),对于不使用时区的时区返回0,将其留给子类以覆盖此方法以用于其他夏令时偏移。

如果它返回正值和负值,那将导致两个季节之间的两小时差异。

相关问题