在Java中获取当前日期和其他日期之间的天数

时间:2017-10-12 19:26:36

标签: java date date-difference

我需要一种方法来返回当天和其他任何日期之间的天数差异,我有以下内容:

private long getDays(Date dateOp) {
    Calendar feCurrent=Calendar.getInstance();
    feCurrent.set(Calendar.HOUR_OF_DAY, 0);
    feCurrent.set(Calendar.MINUTE, 0);
    feCurrent.set(Calendar.SECOND, 0);

    Calendar feAna=Calendar.getInstance();
    feAna.setTime(dateOp);
    feAna.set(Calendar.HOUR_OF_DAY, 0);
    feAna.set(Calendar.MINUTE, 0);
    feAna.set(Calendar.SECOND, 0);
    feAna.getTime());
    long timeDiff = Math.abs(feAna.getTime().getTime() - feCurrent.getTime().getTime());

    return TimeUnit.MILLISECONDS.toDays(timeDiff);
}

事情是我总是少一天,例如,如果日期作为参数是2017年10月16日,结果将是3,但它实际上是4,我调试了和timeDiff为那些日期是345599395,当转换为天数是3.999 ....

有谁知道它为什么不起作用。

顺便说一下,参数的日期是从数据库加载的,因为如果我尝试使用主设置两个日期就可以了。

1 个答案:

答案 0 :(得分:4)

如果使用Java 8

,则可以使用java.time组件
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

final class PeriodTest {

    public static void main(String[] args) {
        LocalDate now = LocalDate.of(2017, 4, 4); // 2017-04-04
        LocalDate otherDate = LocalDate.of(2015, 10, 23); // 23-10-2015
        long days = Math.abs(ChronoUnit.DAYS.between(otherDate, now));

        System.out.println("Days = " + days);
    }
}

输出

Days = 529

优点:

  • 您不必使用旧的Calendar对象
  • 您可以使用java.util.Date方法将java.time.Instant转换为Date.toInstant(),以使其与当前示例一起使用

Java 6解决方案

对于Java 6,您可以使用{8}作为Java 8 Time API的前身。

import org.joda.time.Days;
import org.joda.time.LocalDate;

final class PeriodTest {

    public static void main(String[] args) {
        LocalDate now = LocalDate.parse("2017-04-04");
        LocalDate otherDate = LocalDate.parse("2015-10-23");

        int days = Math.abs(Days.daysBetween(now, otherDate).getDays());

        System.out.println("Days = " + days);
    }
}