以下代码无法在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)
最后,这个问题似乎可能不存在于Android真机上。
有任何意见吗?
答案 0 :(得分:0)
我相信,这是因为这种转变:
香港在1941年采取了夏令时措施。然而,在二十世纪七十年代,政府认为这些措施是不必要的,因为香港的纬度相对较低。 1979年取消了这种做法。
这是DST在1979年5月13日发生的变化。
1979年5月13日星期日 3:29:59 AM没有UTC + 8小时HKT
3:30:00 AM→4:30:00 AM + 1h UTC + 9h HKST DST开始
1979年10月21日星期日凌晨3:29:59 + 1小时UTC + 9小时HKST
由于香港的DST开启和关闭,最后关闭,这可能是问题的根本原因。