有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案