我想将两个日期转换为毫秒,但给定的结果是错误的,代码有什么问题吗?
GregorianCalendar c1 = new GregorianCalendar();
GregorianCalendar c2 = new GregorianCalendar();
c1.set(2013, 01, 31, 16, 44, 49);
c2.set(2013, 02, 01, 12, 59, 55);
System.out.println("c1 = "+c1.getTimeInMillis()+"\nc2 = "+ c2.getTimeInMillis());
output:
c1 = 1362300289619
c2 = 1362113995619在计算了时间之后,它给出了这个结果:0Month -2Day -3Hour -44Min -54Sec是错误的。并且一定是这样的:0Month 0Day 20Hour 15Min 6Sec。
c1比c2大,因为它给出了错误的结果,但为什么c1比c2大,在这种情况下,无法计算两个日期之间的时间。如果有人知道,请帮助我,提前谢谢。
发布于 2013-02-01 19:29:23
月份是从0开始的,所以在您的示例中,c1是2月31日,它被解释为3月3日(2月只有28天),而c2是3月1日。
发布于 2013-02-01 19:29:33
这段代码:
c1.set(2013, 01, 31, 16, 44, 49);正在尝试设置2月31日,因为Java月份是从0开始的。我怀疑你会在3月3日结束,也就是2月28日之后的3天。这显然是在3月1日之后,也就是你的Calendar.set设定的时间。
来自Calendar.set的文档
月份-用于设置月份日历字段的值。月份值是从0开始的。例如,0表示一月份。
无论何时你发现你的代码行为奇怪,总是检查任何你不能百分之百确定的API调用的细节。
作为另一种选择,我强烈建议您尽可能使用Joda Time -它是一个更健全的应用程序接口。
发布于 2013-02-02 00:24:21
感谢你们的回复!现在问题解决了,在我不知道Java中的月份从零开始之前,只需从月数减1……这是如何解决的
c1.set(2013,(01-1),31,16,44,49);
c2.set(2013,(02-1),01,12,59,55);
相反,您可以在java.util.Calendar类上使用常量,这将使您的代码更易于阅读。
c1.set(2013, Calendar.JANUARY, 31, 16, 44, 49);
c2.set(2013, Calendar.FEBRUARY, 01, 12, 59, 55);https://stackoverflow.com/questions/14645276
复制相似问题