2012-07-12 138 views
0
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。但是,我的问题是...两个日历日期不一致的Java日历天

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

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

+0

设置日历对象(全为0)的小时,分​​钟,秒和毫秒,然后重新评估resut。 – 2012-07-12 18:03:49

+0

我得到3.0和10.0使用Java 7u2运行你的代码 – s106mo 2012-07-12 18:04:05

回答

5

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

+0

正确和正确。一秒钟接受。我将寻找一种方法来克服这一点。 – jn1kk 2012-07-12 18:03:09

+0

你有没有试过JodaTime?我认为它可以处理像这样的东西(以天而不是毫秒为单位)。 – 2012-07-12 18:11:52

+0

请看看,谢谢。 – jn1kk 2012-07-12 18:15:25