使用Java 8查找两个日期之间的中间日期

Sri*_*ngo 1 java java-time

我发现听起来很难.

所以,我有一个最大日期和一个最小日期,我需要找到这两个日期之间的中位数日期.我使用Java 8来查找我的最大和最小日期,

LocalDate gerbutsmin = YearMonth.now().plusMonths(2).atDay(1);
LocalDate gerbutsmax = YearMonth.now().plusMonths(15).atDay(1);
Run Code Online (Sandbox Code Playgroud)

在此之后我将如何继续?也许我需要切换回Calander?

Tim*_*sen 6

尝试使用DAYS.between():

LocalDate gerbutsmin = YearMonth.now().plusMonths(2).atDay(1);
LocalDate gerbutsmax = YearMonth.now().plusMonths(15).atDay(1);
long numDays = ChronoUnit.DAYS.between(gerbutsmin, gerbutsmax);
LocalDate median = gerbutsmin.plusDays(numDays / 2L);  // plusDays takes a long
System.out.println(median);

2019-03-17
(output as of today, which is 2019-07-26)
Run Code Online (Sandbox Code Playgroud)

演示

如果您的最小和最大日期之间的差异是奇数,则存在边界条件.在这种情况下,没有正式的中位数日,而是中位数将在两天之间下降.

注意:

如果你想知道在边缘情况下究竟发生了什么,如果低日期是今天(2018-07-26)和三天之后的高日期(2018-07-29),那么中位数将被报告为2018-07-27.


小智 5

LocalDate gerbutsmin = YearMonth.now().plusMonths(2).atDay(1);
LocalDate gerbutsmax = YearMonth.now().plusMonths(15).atDay(1);

LocalDate median = gerbutsmin.plusDays(ChronoUnit.DAYS.between(gerbutsmin, gerbutsmax) / 2);
Run Code Online (Sandbox Code Playgroud)