Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中计算两个日期或日历对象之间的天数_Java_Date_Calendar_Difference - Fatal编程技术网

在Java中计算两个日期或日历对象之间的天数

在Java中计算两个日期或日历对象之间的天数,java,date,calendar,difference,Java,Date,Calendar,Difference,因此,对于任务,我们必须使用JDK日期或日历对象来表示我们正在设计的系统中的日期(否则我将使用另一个库)。对于函数,我需要确保从输入日期到当前日期至少已经过了一定的年数。我编写了以下方法来尝试计算两个日历对象之间的天数: public static int daysSince(Calendar pastDate) { Calendar presentDate = Calendar.getInstance(); int daysSince = 0; while (pas

因此,对于任务,我们必须使用JDK日期或日历对象来表示我们正在设计的系统中的日期(否则我将使用另一个库)。对于函数,我需要确保从输入日期到当前日期至少已经过了一定的年数。我编写了以下方法来尝试计算两个日历对象之间的天数:

public static int daysSince(Calendar pastDate) {
    Calendar presentDate = Calendar.getInstance();

    int daysSince = 0;

    while (pastDate.before(presentDate)) {
        pastDate.add(Calendar.DAY_OF_MONTH, 1);
        daysSince++;
    } return daysSince;
}
然而,这种方法似乎总是比两个日期之间的实际天数少30天,我似乎不明白为什么?例如,它说2016年3月25日至2016年4月25日之间只有一天。我遗漏了什么?

您的代码基本上可以正常工作()。我怀疑你的测试数据有问题

例如,它说2016年3月25日至2016年4月25日之间只有一天

我怀疑您创建的测试日期(2016年3月25日)不正确。请记住,
MONTH
以0开头,因此要创建2016年3月25日,您需要:

past.set(Calendar.DAY_OF_MONTH, 25);
past.set(Calendar.MONTH, 2);           // NOTE THE 2
past.set(Calendar.YEAR, 2016);
我怀疑你在需要
2
的地方使用了
3
,而你看到的那一天是因为你的考试日期是午夜,而你当前的日期不是


除此之外,您可能希望更好地处理时间,该代码可以工作。

您可以这样做,而不是循环:

public static int daysSince(Calendar pastDate) {
    Calendar presentDate = Calendar.getInstance();
    long millisInADay = 1000 * 60 * 60 * 24;

    return(pastDate.getTimeInMillis()-presentDate.getTimeInMillis())/millisInADay;
}

在设置过去日期时,确保将月份视为表0-11

Calendar presentDate = Calendar.getInstance(); //25th April, 2016
    Calendar pastDate = Calendar.getInstance();
    pastDate.set(2016, 2, 25); //its 25th March, 2016 here
    int daysSince = 0;
    while(pastDate.before(presentDate)){
        pastDate.add(Calendar.DAY_OF_MONTH, 1);
        daysSince++;
    }
    System.out.println(daysSince);
//output : 31

看这个谢谢,我只是忘记了0-1。然而,我现在遇到了另一个问题,我更新了描述它的原始帖子。@transition0nary:一旦问题得到回答(或者坦率地说,甚至在之前,因为人们可能正在研究答案),从根本上改变问题是不合适的;问题不应该是移动的目标。如果你有一个新问题,问一个新问题。我已经回滚了编辑(您仍然可以获取其内容来构建新问题)。请查看为什么天真地这样做是个坏主意。谢谢。我确实制作了另一个不涉及循环的实现,但是现在我在考虑闰年时遇到了将天转换为年的问题。JDK中是否有类似于我在实现中使用的TimeUnit枚举的转换工具可以实现这一点?谢谢,我认为在这种情况下使用LocalDate是最好的方法@T.J.Crowder,谢谢你的意见。我写的代码只是为了表达总体想法。根据所需的规范对其进行修改非常容易。