Java日历中的错误时间
TimeZone zone1 = TimeZone.getTimeZone("America/New_York");
TimeZone zone2 = TimeZone.getTimeZone("Europe/Istanbul");
int hour1 = Calendar.getInstance(zone1).get(Calendar.HOUR_OF_DAY);
int hour2 = Calendar.getInstance(zone2).get(Calendar.HOUR_OF_DAY);
// hour1 gives 1
// hour2 gives 7
现在在纽约是1,但在伊斯坦布尔是8。为什么Java给欧洲/伊斯坦布尔的结果少了1个?是因为夏令时吗?如果是这样,它不是自动处理了吗
我不确定问题是否是因为夏令时的原因。我猜,下面显示的两个时区都有DST偏移:
zone1.getDSTSavings()/1000L // gives 3600
zone2.getDSTSavings()/1000L // gives 3600
zone1.useDaylightTime() // true
zone2.useDaylightTime() // true
zone1.inDaylightTime(new Date()) // false
zone2.inDaylightTime(new Date()) // false
已解决:
时区数据不是最新的。从Java网站下载tzupdater实用程序,并发布:
java -jar tzupdater.jar -l 'http://www.iana.org/time-zones/repository/tzdata-latest.tar.gz'
这会自动下载最新的tz数据并更新JRE。这简直是地狱。因为一个愚蠢的时区问题损失了两天。这应该是自动化的,JRE应该每天自我更新。为什么不呢
插入新的crontab条目:(另一个)
crontab -e
00 05 * * * java -jar tzupdater.jar -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz
共 (0) 个答案