我发现听起来很难。
因此,我有一个最大日期和一个最小日期,我需要找到这两个日期之间的中间日期。我使用Java 8查找我的最大日期和最小日期,
tf.float64
此后我将如何进行?也许我需要切换回Calander?
答案 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)
如果您的最小日期和最大日期之差为奇数,则存在边界条件。在这种情况下,没有正式的中位数天,而是中位数介于两天之间。
注意:
如果您想知道在边缘情况下到底会发生什么,如果低日期是今天(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