2
我的BlackBerry应用程序需要准确的时区支持。因为它运行J2ME,所以Joda Time不是一个选项。在一些其他人的帮助下,我已经想出了如何让Java的内置时区支持为我工作,但事实证明,它仍然从夏令时切换到非夏令时的错误。你可以自己尝试一下,甚至在Java 6:J2ME中的正确时区支持
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文件与我的应用程序一起发送,但是我想知道是否有更好的方法。你知道吗?我不能成为第一个遇到这个问题的人,对吗?
我几乎犯同样的错误。尽管javadoc注释中存在信息,但该方法的参数的奇怪集合和“millis”参数的名称并不容易。 :) – vaughandroid 2012-03-28 12:59:37