首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将日期转换为毫秒,结果错误

将日期转换为毫秒,结果错误
EN

Stack Overflow用户
提问于 2013-02-01 19:26:39
回答 4查看 804关注 0票数 3

我想将两个日期转换为毫秒,但给定的结果是错误的,代码有什么问题吗?

代码语言:javascript
复制
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大,在这种情况下,无法计算两个日期之间的时间。如果有人知道,请帮助我,提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-01 19:29:23

月份是从0开始的,所以在您的示例中,c1是2月31日,它被解释为3月3日(2月只有28天),而c2是3月1日。

票数 7
EN

Stack Overflow用户

发布于 2013-02-01 19:29:33

这段代码:

代码语言:javascript
复制
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 -它是一个更健全的应用程序接口。

票数 5
EN

Stack Overflow用户

发布于 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类上使用常量,这将使您的代码更易于阅读。

代码语言:javascript
复制
c1.set(2013, Calendar.JANUARY, 31, 16, 44, 49);
c2.set(2013, Calendar.FEBRUARY, 01, 12, 59, 55);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14645276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档