Java 减去毫秒不会';我不能给出预期的结果
Java 减去毫秒不会';我不能给出预期的结果,java,date,datetime,grails,groovy,Java,Date,Datetime,Grails,Groovy,(day2.getTime()-day1.getTime())=7199996 这里似乎有些问题,因为当我将毫秒转换为小时时,7199996并不完全是2小时(7200000)。事实上,它是4毫秒少。为什么不是7200000毫秒 您没有清除毫秒字段 加 在cal.set(…)之前行,或添加 cal.clear(); 更一般地说,不要使用java.util.Calendar和java.util.Date:它们是旧的、设计糟糕的类,充满了众所周知的bug 使用Java8中引入的java.time包
(day2.getTime()-day1.getTime())=7199996
这里似乎有些问题,因为当我将毫秒转换为小时时,7199996并不完全是2小时(7200000)。事实上,它是4毫秒少。为什么不是7200000毫秒 您没有清除毫秒字段 加 在
cal.set(…)之前代码>行,或添加
cal.clear();
更一般地说,不要使用java.util.Calendar
和java.util.Date
:它们是旧的、设计糟糕的类,充满了众所周知的bug
使用Java8中引入的java.time
包中的类;或Java早期版本中的类或JodaTime。您没有清除毫秒字段
加
在cal.set(…)之前代码>行,或添加
cal.clear();
更一般地说,不要使用java.util.Calendar
和java.util.Date
:它们是旧的、设计糟糕的类,充满了众所周知的bug
使用Java8中引入的java.time
包中的类;或者Java早期版本中的类或JodaTime。以下是Three Ten Backport版本,它将在Java 6上工作,作为对公认答案的支持和适度补充
cal.set(Calendar.MILLISECONDS, 0);
它打印:
(dateTime2-dateTime1)=7200000
很抱歉,我没有运行Groovy/Grails环境,所以我只提供了Java代码,并且必须相信您能够进行翻译
你的问题只是关于过时的类的又一个例子,比如Calendar
,它展示了你是多么容易从这些类中得到意想不到的结果,以及当这种情况发生时,你通常只剩下很少的线索。在您的例子中,获取Java 6的Three-Ten Backport当然值得考虑。此外,上面的代码也更短,而且在我看来,更清晰、更自然。为了支持公认的答案,并作为对公认答案的适度补充,下面是Three Ten Backport版本,它将在Java 6上工作
cal.set(Calendar.MILLISECONDS, 0);
它打印:
(dateTime2-dateTime1)=7200000
很抱歉,我没有运行Groovy/Grails环境,所以我只提供了Java代码,并且必须相信您能够进行翻译
你的问题只是关于过时的类的又一个例子,比如Calendar
,它展示了你是多么容易从这些类中得到意想不到的结果,以及当这种情况发生时,你通常只剩下很少的线索。在您的例子中,获取Java 6的Three-Ten Backport当然值得考虑。此外,上面的代码也更短,在我看来,更清晰、更自然。谢谢。但我必须使用java 6,我们的低端服务器“或者在早期版本上使用threetenbp或JodaTime的类。”谢谢。但我必须使用java 6,我们的低端服务器“或早期版本上threetenbp或JodaTime的类。”Thx,@Userthatisnotauser,用于改进。Thx,@Userthatisnotauser,用于改进。