本文正在参加「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…