【发布时间】:2018-08-21 18:41:48
【问题描述】:
我需要确定 Instant 是否在 DST 中。我希望它能够像这样工作:
ZoneId z = ZoneId.of("America/New_York");
ZoneRules zr = z.getRules();
TimeZone tz = TimeZone.getTimeZone(z);
Instant summer = ZonedDateTime.of(2018, 5, 1, 2, 2, 2, 2, z).toInstant();
Instant winter = ZonedDateTime.of(2018, 11, 1, 2, 2, 2, 2, z).toInstant();
System.out.println("ZoneRules winter: " + zr.isDaylightSavings(winter));
System.out.println("ZoneRules summer: " + zr.isDaylightSavings(summer));
System.out.println("TimeZone winter: " + tz.inDaylightTime(Date.from(winter)));
System.out.println("TimeZone summer: " + tz.inDaylightTime(Date.from(summer)));
但我对“America/New_York”和其他美国时区的输出始终是:
ZoneRules winter: true
ZoneRules summer: true
TimeZone winter: true
TimeZone summer: true
ZoneRules.getOffset() 也总是返回相同的值。
但是,在使用欧洲时区时,我没有看到相同的行为。使用ZoneId.of("Europe/London") 或ZoneId.of("Europe/Amsterdam") 我得到了预期的结果:
ZoneRules winter: false
ZoneRules summer: true
TimeZone winter: false
TimeZone summer: true
我错过了什么?
这里有一些example code on ideone。
【问题讨论】:
标签: java timezone dst java-time