Java 8中计算两个日期之间的天数| Java Debug 笔记

1,417 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

问题:Java 8中计算两个日期之间的天数

我知道有很多关于如何在Java中获取Dates的问题,但是我想要一个使用Java 8 Date API的新示例。我也了解JodaTime库,但是我想要一种不依赖外部库的方法。 该功能需要符合以下要求: 1.防止日期保存出错 2.输入是两个Date对象(我没有时间了解LocalDateTime,但是我需要对Date实例进行此操作)

回答一

如果需要逻辑日历的日期,请使用java.time.temporal.ChronoUnit中的DAYS.between()方法:

LocalDate dateBefore;
LocalDate dateAfter;
long daysBetween = DAYS.between(dateBefore, dateAfter);

如果你想使用24小时制(持续时间),则可以改用Duration类:

LocalDate today = LocalDate.now()
LocalDate yesterday = today.minusDays(1);
// Duration oneDay = Duration.between(today, yesterday); // throws an exception
Duration.between(today.atStartOfDay(), yesterday.atStartOfDay()).toDays() // another option

更多信息参考文档

回答二

你可以使用until():

LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
LocalDate christmas = LocalDate.of(2014, Month.DECEMBER, 25);
 
System.out.println("Until christmas: " + independenceDay.until(christmas));
System.out.println("Until christmas (with crono): " + independenceDay.until(christmas, ChronoUnit.DAYS));

回答三

如果startDate和endDate是java.util.Date的实例

我们可以使用ChronoUnit 枚举中的between()方法:

public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive) {
    //..
}

ChronoUnit.DAYS每24小时算一天。

import java.time.temporal.ChronoUnit;

ChronoUnit.DAYS.between(startDate.toInstant(), endDate.toInstant());

//OR 

ChronoUnit.DAYS.between(Instant.ofEpochMilli(startDate.getTime()), Instant.ofEpochMilli(endDate.getTime()));

回答四

在枚举类型java.time.temporal.ChronoUnit中使用DAYS 。下面是示例代码:

输出: *Number of days between the start date : 2015-03-01 and end date : 2016-03-03 is ==> 368. *Number of days between the start date : 2016-03-03 and end date : 2015-03-01 is ==> -368

package com.bitiknow.date;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

/**
 * 
 * @author pradeep
 *
 */
public class LocalDateTimeTry {
    public static void main(String[] args) {

        // Date in String format.
        String dateString = "2015-03-01";

        // Converting date to Java8 Local date
        LocalDate startDate = LocalDate.parse(dateString);
        LocalDate endtDate = LocalDate.now();
        // Range = End date - Start date
        Long range = ChronoUnit.DAYS.between(startDate, endtDate);
        System.out.println("Number of days between the start date : " + dateString + " and end date : " + endtDate
                + " is  ==> " + range);

        range = ChronoUnit.DAYS.between(endtDate, startDate);
        System.out.println("Number of days between the start date : " + endtDate + " and end date : " + dateString
                + " is  ==> " + range);

    }

}

文章翻译自Stack Overflow:stackoverflow.com/questions/2…