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