有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想把两个日期转换成毫秒,但是给出的结果是错误的,代码有什么问题吗?,如何解决它否则

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


共 (4) 个答案

  1. # 1 楼答案

    Thank you guys for your reply! The problem solved now, only by subtract 1 from months, before i don't know that in Java the months start from zero... this is how to solve

    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);
    
  2. # 2 楼答案

    月份是以0为基础的,因此在您的示例中,c1是2月31日,被解释为3月3日(2月只有28天),c2是3月1日

  3. # 3 楼答案

    谢谢你们的回复! 现在问题解决了,只需从月份中减去1,在我不知道Java中月份从零开始之前。。。 这是如何解决的:

    c1.set(2013, (01-1), 31, 16, 44, 49);
    c2.set(2013, (02-1), 01, 12, 59, 55);
    
  4. # 4 楼答案

    此代码:

    c1.set(2013, 01, 31, 16, 44, 49);
    

    正在尝试设置二月31日,因为Java月份是基于0的。我猜你的结局是3月3日,也就是2月28日之后的3天。这显然是在3月1日之后,这就是你的c2的设置

    ^{}的文件中:

    month - the value used to set the MONTH calendar field. Month value is 0-based. e.g., 0 for January.

    每当您发现自己的代码行为异常时,总是检查您无法100%确定的任何API调用的详细信息

    作为替代方案,我强烈建议您尽可能使用Joda Time——这是一个更加理智的API