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

时间:2018-07-26 13:12:08

标签: java java-time

我发现听起来很难。

因此,我有一个最大日期和一个最小日期,我需要找到这两个日期之间的中间日期。我使用Java 8查找我的最大日期和最小日期,

tf.float64

此后我将如何进行?也许我需要切换回Calander?

3 个答案:

答案 0 :(得分: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)

Demo

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

注意:

如果您想知道在边缘情况下到底会发生什么,如果低日期是今天(2018-07-26),高日期是三天之后(2018-07-29),那么将报告中位数为2018-07-27

答案 1 :(得分:4)

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);

答案 2 :(得分:0)

“两个日期的中间日期”没有明确定义-您必须决定如何处理相隔奇数天的日期(例如,一个月的第一天到第四天,或者第一天到第二天之间的中间日期是什么),以及如何处理日期对象的时间部分。

您的方法存在的具体问题是日期不是数字,因此您不能将它们相加并除以二。为此,请使用getTime()方法获取自该纪元以来的秒数,然后对其进行操作:

var middate = new Date((startdate.getTime() + enddate.getTime()) / 2.0);

这将为您提供两个日期之间的中间时间,将它们视为时间点。

点击here

相关问题