我想将两个日期转换为毫秒,但给定的结果是错误的,代码有什么问题吗?如何解决它,否则...
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
Run Code Online (Sandbox Code Playgroud)
在计算时间之后,它给出了这个结果:0Month -2Day -3Hour -44Min -54Sec
这是错误的.并且必须是这样的:0Month 0Day 20Hour 15Min 6Sec.
c1比c2大,因为它给出了错误的结果,但是为什么c1变得大于c2,在这种情况下,不可能计算两个日期之间的时间.如果有人知道请帮助我,提前谢谢.
这段代码:
c1.set(2013, 01, 31, 16, 44, 49);
Run Code Online (Sandbox Code Playgroud)
正试图设置2月 31日,因为Java月份是0.我怀疑你最终会在2月28日3天后的3月3日结束.这显然是在3月1日之后,这就是你的目标c2.
来自以下文件Calendar.set:
month - 用于设置MONTH日历字段的值.月值基于0.例如,1月份为0.
每当您发现代码行为异常时,请始终检查您不是100%确定的任何API调用的详细信息.
作为替代方案,我强烈建议您尽可能使用Joda Time - 这是一个更加理智的API.