【发布时间】:2011-02-03 10:52:00
【问题描述】:
我的 BlackBerry 应用程序需要准确的时区支持。因为它运行 J2ME,所以 Joda Time 不是一个选项。在 SO 上其他一些人的帮助下,我想出了如何使 Java 的内置时区支持为我工作,但事实证明它仍然会从夏令时切换到非夏令时错误。即使在 Java 6 上,您也可以自己尝试:
TimeZone zone = TimeZone.getTimeZone("America/Los_Angeles");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(zone);
calendar.set(2011, Calendar.MARCH, 13, 1, 0, 0);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.set(2011, Calendar.MARCH, 13, 6, 0, 0);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.set(2011, Calendar.MARCH, 13, 23, 59, 59);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.set(2011, Calendar.MARCH, 14, 0, 0, 1);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
2011 年的切换时间是 3 月 13 日凌晨 2 点,但 Java 的切换时间是 3 月 14 日午夜。这意味着几乎一整天都是错误的。这是不可接受的。
我已经着手实现我自己的基于this 的 tzdata 解析器,并将 tzdata 文件与我的应用程序一起发送,但我想知道是否有更好的方法。你认识一个吗?我不能成为第一个遇到这个问题的人,可以吗?
【问题讨论】:
标签: java blackberry java-me timezone