清除 Calendar.HOUR 增加了数百天

Clearing Calendar.HOUR adds hundreds of days

我正在使用代码行:

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 日,然后日历正常运行。

试试这个:

      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

我发现了问题。 Android SDK 21 似乎有一个错误 - 在 GregorianCalendar 上使用 getActualMaximum(Calendar.WEEK_OF_YEAR) 时,它会将对象置于这样一种状态,如果您在 get() 调用之前使用 set() 调用, 它会将您的约会日期定为 12 月 31 日或 23 日(取决于年份)。