Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 清除Calendar.HOUR会增加数百天_Java_Android_Calendar_Gregorian Calendar - Fatal编程技术网

Java 清除Calendar.HOUR会增加数百天

Java 清除Calendar.HOUR会增加数百天,java,android,calendar,gregorian-calendar,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 我还尝试了

我正在使用代码行:

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());

我发现了问题。Android SDK 21似乎有一个bug——当在GregorianCalendar上使用getActualMaximum(Calendar.WEEK\u OF\u YEAR)时,它会将对象置于这样一种状态:如果在get()调用之前使用set()调用,它会将您的日期设置为12月31日或23日(取决于年份).

我得到的时间:3月17日星期二04:29:16 GMT+13:00 2015年12月24日星期四00:29:16 GMT+13:00 2015尝试运行我的准确代码,您回复中的日期并不反映您已尝试过。您的代码有效。我得到了正确的一天。(但是-我仍然需要它来处理克隆。我无法获取日历实例-此函数必须与任何常规给定日期一起使用)对创建的日历实例调用
setTime()
。请参阅更新的代码。您坚持使用
clone()
的原因可能是您实际使用的是
GregoriaCalendar
的(自定义)子类
Calendar
对象将字段与实际日期对象分开存储,并且不是每个操作都能始终保持它们的同步,尤其是如果您创建了自己的子类,该子类可以实现who-know-what。否-我使用的是安卓SDK 21中的GregorianCalendar。我几乎不相信您。测试它,复制它,检查代码。我现在相信你了。小心日历。。。
cal4 time: Fri Mar 27 19:02:55 EDT 2015
cal4 time: Fri Mar 27 00:02:55 EDT 2015