【问题标题】:Java - Calendar / Date difference - Find difference down to secondsJava - 日历/日期差异 - 查找差异到秒
【发布时间】:2013-02-14 07:25:25
【问题描述】:

尝试用 Java 制作一个小倒计时程序。

我正在寻找应用程序的日期部分之间的差异,出于某种原因,我只得到了日期。

我想要天、小时、分钟和秒。我不知道为什么我的计算只是被四舍五入到一个偶数......在这个例子中是 163,而不是 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

我认为,如果它使用毫秒,那将是某种小数。我确信这是我想念的简单东西,但就是找不到!

提前致谢!

【问题讨论】:

    标签: java date calendar gregorian-calendar java.util.date


    【解决方案1】:

    您正在将一个整数除以另一个整数。在进行除法之前,您需要将它们转换为双打。像这样

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

    【讨论】:

    • 果然!非常感谢。。很高兴这是一个简单的错误。
    • 如果两个日期都来自不同的夏令时区,这将不起作用。在这种情况下,时差将是 X 天 - 1 和 23 小时 :)
    • 确实,在有夏令时的地方,一年有一天23小时,一天25小时。但是,日期对象内部是一个 UTC 值。 UTC 只有 24 小时,所以它可以工作。当您考虑时区时,您总是会遇到这个问题:一个两小时的电话会议可能在一个时区的同一天开始和结束,它可能在不同的时区的不同日子开始和结束。他们不同意天数!这与持续时间无关,而是根据该时区对时间的解释。
    • 您是对的,您可以将 23,9 天的差异解释为 24 天,并且工作会完成,但是,结果本身是不正确的,特别是如果您将结果转换为 int
    • 其实他不是在找int。他正在寻找一天和一天的分数的小数。 -------- 如果最初的问题是想出一个代表天数和天数的小数,那么时区、25 小时天和日光的概念根本没有意义。我知道你对这个答案投了反对票,因为你知道一些关于日期的事情,但是如果你访问原始问题,你会发现没有其他合理的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多