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?
答案 0 :(得分:1)
理论上它可以返回负值 - 如果你使用的是TimeZone
子类,夏令时会导致时钟返回而不是前进。
我非常怀疑你会在野外看到它,虽然我已经在Windows时区数据库中看到类似的东西来解决Windows无法应对时区变化的事实他们的标准UTC偏移...如果一个区域从UTC + 5变为UTC + 6(例如标准时间) - 并且停止观察DST - 区域数据表明“DST”实际上是-1小时,并且刚刚倒转它实际上是人类所期望的。我已经在俄罗斯时区看过这个,虽然我相信现在数据更清晰了。
桌面JRE阻止您构建具有负DST节省的SimpleTimeZone
,但我不知道Android中是否存在相同(未记录的)限制。您总是可以创建自己的TimeZone
子类,但 会返回负偏移量。
答案 1 :(得分:0)
对于使用夏令时的时区,此类返回3600000(1小时),对于不使用时区的时区返回0,将其留给子类以覆盖此方法以用于其他夏令时偏移。
如果它返回正值和负值,那将导致两个季节之间的两小时差异。