【问题标题】:Java Calendar Days Between Two Calendar Dates Inconsistency两个日历日期之间的 Java 日历天数不一致
【发布时间】:2012-07-13 02:01:35
【问题描述】:
import java.util.GregorianCalendar;

public class FullYear {

    public static void main(String[] args) {

        GregorianCalendar cal1 = new GregorianCalendar(2011,2,9); 
        GregorianCalendar cal2 = new GregorianCalendar(2011,2,12); 
        long ms1 = cal1.getTime().getTime(); 
        long ms2 = cal2.getTime().getTime(); 
        long difMs = ms2-ms1; 
        long msPerDay = 1000*60*60*24; 

        System.out.println(difMs);
        System.out.println(msPerDay);

        double days = difMs / msPerDay;

        System.out.println(days);

        GregorianCalendar cal11 = new GregorianCalendar(2011,2,9); 
        GregorianCalendar cal22 = new GregorianCalendar(2011,2,19); 
        long ms11 = cal11.getTime().getTime(); 
        long ms22 = cal22.getTime().getTime(); 
        long difMs1 = ms22-ms11; 
        long msPerDay1 = 1000*60*60*24; 

        System.out.println(difMs1);
        System.out.println(msPerDay1);

        double days2 = difMs1 / msPerDay1;

        System.out.println(days2);

    }

}

这会输出 3.0 和 9.0(我希望是 10!!)。这会进行整数除法,因此 9.0 实际上是 9.95。但是,我的问题是……

  • 2 月 9 日和 2 月 19 日之间的差异是 860400000 毫秒,即 239 小时。
  • 2 月 9 日和 2 月 12 日之间的差异是 259200000 毫秒,即 72 小时。

第一个差异不应该是 240 小时吗?

【问题讨论】:

  • 在日历对象上设置小时、分钟、秒和毫秒(全为 0),然后重新计算结果。
  • 我得到 3.0 和 10.0 使用 Java 7u2 运行您的代码

标签: java calendar


【解决方案1】:

您正在计算 March 的差异,而不是 2 月,并且您已经度过了夏令时的开始。

【讨论】:

  • 对对对。一秒接受。我正在寻找一种方法来克服这个问题。
  • 你试过JodaTime吗?我认为它可以处理这样的事情(以天而不是毫秒为单位)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2017-02-25
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2012-10-23
  • 2015-07-08
相关资源
最近更新 更多