2013-02-14 169 views
0

试图在Java中制作一个倒计时程序。Java - 日历/日期差异 - 查找差异降至秒

我正在寻找应用程序的日期部分之间的差异,并且出于某种原因,我只能获得这些日子。

我想要几天,几小时,几分钟和几秒钟。我不知道为什么我的计算只是四舍五入到一个偶数...在这个例子中,而不是163.xx?

这里是我的代码:

import java.util.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class CalcData { 

    Calendar cal1; 
    Date today; 

    public CalcData() { 

     cal1 = new GregorianCalendar(); 
     today = new GregorianCalendar().getTime(); 

    } 

    public String calcDiff() { 

     cal1.set(2013, 6, 27, 7, 15, 0); 
     double theDays = calcDays(cal1.getTime(), today); 
     return "" + theDays; 

    } 

    public double calcDays(Date d1, Date d2) { 

     double theCalcDays = (double) ((d1.getTime() - d2.getTime())/(1000 * 60 * 60 * 24)); 
     return theCalcDays; 

    } 
} 

当我运行这一点,正如我所说,我得到的结果是:163.0

我会想,如果是使用毫秒,这将是一些小数点。我相信这是简单的,我失踪了,但找不到它!

在此先感谢!

回答

0

您正在用另一个整数除整数。在进行分区之前,你需要将这些投入到双打中。像这样

double theCalcDays = ((double) (d1.getTime() - d2.getTime()))/(1000 * 60 * 60 * 24); 
+0

果然!非常感谢。很高兴这是一个简单的错误。 – cbaze19 2013-02-14 07:39:47

+0

如果两个日期来自不同的夏令时节省区,则这将不起作用。在这种情况下,时差为X天-1和23小时:) – Antoniossss 2014-05-06 06:44:19

+0

事实上,在有夏令时的地方,每年有一天是23小时,而一天是25小时。但是,日期对象内部是UTC中的一个值。 UTC只有24小时的日子,所以它工作。考虑时区时,您总会遇到此问题:两小时的电话会议可能会在同一个时区的同一天开始和结束,并且可能会在不同时区的不同时间开始和结束。他们不同意天数!这与持续时间无关,而是根据该时区来解释时间。 – AgilePro 2014-05-07 00:06:16