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

java中的TimeZone.getdstsavations()是否总是返回正值?,java,android,Java,Android,java中的TimeZone.getdstsavations()总是返回正值还是负值 我试过这种方法 long millisecondsForGivenDateTime = 0l; if (TimeZone.getTimeZone(strTZID).inDaylightTime( new Date(millisecondsForGivenDateTime))) { millisecondsForGivenDa

java中的TimeZone.getdstsavations()总是返回正值还是负值

我试过这种方法

        long millisecondsForGivenDateTime = 0l;
        if (TimeZone.getTimeZone(strTZID).inDaylightTime(
                new Date(millisecondsForGivenDateTime))) {
            millisecondsForGivenDateTime = (millisecondsForGivenDateTime + TimeZone
                    .getTimeZone(strTZID).getDSTSavings());
        }
这里strTZID是动态传递给此函数的时区id,毫秒ForgivenDateTime包含动态值


我总是得到3600000或0,这个函数不会返回-3600000吗

对于使用夏令时的时区,该类返回3600000(1小时),对于不使用夏令时的时区,该类返回0,让子类为其他夏令时偏移重写此方法


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

理论上,如果您使用的是时区子类,其中夏时制使时钟返回,而不是向前

我非常怀疑你会在野外看到这一点,尽管我在Windows时区数据库中看到了类似的东西,以避免Windows无法处理时区更改其标准UTC偏移量的事实。。。例如,如果一个区域从UTC+5转为UTC+6(作为标准时间),并停止观察DST,则区域数据表明“DST”实际上是-1小时,而实际上与人类预期的时间正好相反。我已经在俄罗斯时区看到了这一点,尽管我相信现在的数据更干净了


桌面JRE阻止您使用负DST节省构建
SimpleTimeZone
,但我不知道Android中是否存在相同的(未记录的)限制。您始终可以创建自己的
时区
子类,该子类确实返回负偏移量。

“这会导致季节之间出现两个小时的差异”-不确定从何处获得。那么,我如何确定将时钟延迟1小时的国家的DST时间?通常,DST的用户在春季开始时将时钟向前调整一小时,在秋季将时钟向后调整到“正常”或常规时间。()是的,通常是提前一个小时,但我认为返回负偏移量的时区是故意这么做的。。。所以不会有“两个小时的差异”。@JohnBritto:你能举一个例子,说明一个国家在DST时将时钟向后拨一小时,而不是向前拨一小时吗?一些国家会在上半年将时钟向后拨,在下半年将时钟向前拨,但在这种情况下,“向前”部分就是DST。虽然消极的DST是可行的,但我不知道有哪个国家真的这样做。