0

以下代码在Android模拟器下无法通过断言:

TimeZone timezone = TimeZone.getTimeZone("Hongkong");
Locale locale = new Locale("zh", "HK"); 
Calendar calendar = Calendar.getInstance(timezone, locale);

calendar.set(Calendar.YEAR, 1979);
calendar.set(Calendar.MONTH, 4);        
calendar.set(Calendar.DAY_OF_MONTH, 13);            
calendar.set(Calendar.HOUR_OF_DAY, 4);  
calendar.set(Calendar.MINUTE, 30);      
calendar.set(Calendar.SECOND, 0);        

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
df.setTimeZone(timezone);
String sDate = df.format(calendar.getTime());

int debug = calendar.get(Calendar.HOUR_OF_DAY);
Assert.assertEquals("Error datetime: " + sDate, 4, debug);

我发现,如果将 DAY_OF_MONTH 更改为 12,错误就消失了:calendar.set(Calendar.DAY_OF_MONTH, 12);

请注意,此问题在 JUnit 测试中不存在。(没有安卓)

最后,这个问题似乎在Android真机上可能不存在。

任何意见?

4

1 回答 1

0

我相信,这是因为这种转变:

香港在 1941 年采取了夏令时措施。然而,在 1970 年代,由于香港的纬度较低,政府认为这些措施没有必要。这种做法在 1979 年被淘汰

这是 1979 年 5 月 13 日发生的 DST 更改。

1979 年 5 月 13 日星期日 凌晨 3:29:59 无 UTC+8h HKT

凌晨 3:30:00 → 凌晨 4:30:00 +1h UTC+9h HKST DST 开始

1979 年 10 月 21 日,星期日 3:29:59 AM +1h UTC+9h HKST

由于香港的 DST 开启和关闭,最后关闭,这可能是问题的根本原因。

于 2012-11-23T22:23:39.860 回答