清除Calendar.HOUR增加了数百天

时间:2015-03-27 21:24:19

标签: java android calendar gregorian-calendar

我正在使用代码行:

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日发生这种情况后,日历会正常运作。

2 个答案:

答案 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