我在处理日历对象时遇到了问题,它在美国/圣地亚哥时区的夏令时(DST)中没有显示正确的偏移量:
以下是我的示例代码:
TimeZone fromTimeZone = TimeZone.getTimeZone("America/Santiago");
// Get a Calendar instance using the default time zone and locale.
Calendar calendar = Calendar.getInstance();
// Set the calendar’s time with the given date
calendar.setTimeZone(fromTimeZone);
calendar.set(Calendar.YEAR, 2015); // 2015
calendar.set(Calendar.MONTH, 2); // Mar
calendar.set(Calendar.DATE, 31); // 31
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 45);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
System.out.println("offset: " + fromTimeZone.getOffset(calendar.getTimeInMillis())/(TimeUnit.MINUTES.toMillis(1)*60));
输出结果为:偏移量为-4。在美国/圣地亚哥时区于2015年3月31日,偏移量应该是-3。(参考:http://www.timeanddate.com/worldclock/converted.html?iso=20150331T00&p1=218&p2=232)
为什么这种情况下日历能得到正确的偏移量?我已经测试了其他时区,在夏令时期间它也能正常工作。
谢谢。
ZoneRulesProvider.getVersions("America/Santiago").lastEntry().getKey();
- Meno Hochschild