我正在使用代码行:
1 GregorianCalendar cal = (GregorianCalendar) date.clone();
2 cal.clear(Calendar.HOUR);
在单元测试中使用此代码时 - 运行正常。然而,当在我的Android设备上运行时,它似乎打破了。这是我的调试器所说的:
第1行之后:
cal.getTimeInMillis() = 1426022494179
在第2行之后:cal.getTimeInMillis() = 1450905694179
我也试过了cal.set(Calendar.HOUR, 0)
,它做了同样的事情。
编辑:经过一些测试后,似乎设置或清除cal对象上的任何内容会立即将我带到您当前所在年份的12月24日。但是,一旦初次切换到12月24日发生这种情况后,日历会正常运作。
答案 0 :(得分:1)
我发现了这个问题。看起来Android SDK 21有一个错误 - 当在GregorianCalendar上使用getActualMaximum(Calendar.WEEK_OF_YEAR)时,它会将对象置于一个状态,这样如果你在get()调用之前使用set()调用,它将把你的日期到12月31日或23日(取决于年份)。
答案 1 :(得分:0)
试试这个:
Calendar cal4 = Calendar.getInstance();
cal4.setTime((Date)d.clone()); // <-- Update
Log.d(TAG,"cal4 time: " + cal4.getTime().toString());
cal4.set(Calendar.HOUR_OF_DAY, 0);
Log.d(TAG,"cal4 time: " + cal4.getTime().toString());
输出:
cal4 time: Fri Mar 27 19:02:55 EDT 2015
cal4 time: Fri Mar 27 00:02:55 EDT 2015