清除 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 日(取决于年份)。
我正在使用代码行:
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 日(取决于年份)。