gpt4 book ai didi

java - 显示浮点值的日期之间的天数

转载 作者:行者123 更新时间:2023-12-01 22:04:07 25 4
gpt4 key购买 nike

我编写了一段代码,以以下方式计算日期之间的天数

SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");

Date date1 = date.parse(startDate);
Date date2 = date.parse(endDate);

long difference = (date2.getTime()-date1.getTime())/(24*60*60*1000);

我的工作是确定 startDate 和 endDate 之间的期限是否正好是一年。

在计算日期之间的差异后,我最初检查年份类型(是否闰年/平年)。

如果是非闰年,那么我会检查差值是否为365

如果是闰年,那么我会检查差值是否为366。

但是对于十一月的几个日期来说

开始日期 = 11/04/2015(月/日/年)结束日期 = 11/04/2016(MM/dd/yyyy)

差异计算为 365,其中代码预期为 366,因为 2016 年结束日期是闰年,而且结束日期的月份在 2 月之后。

真正发生的是我们得到的绝对差是 365.9,而不是 366.0

根据我的观察,这种情况只发生在 11 月的几个日期。

2015年2月11日至2016年2月11日、2015年3月11日至2016年3月11日、2015年4月11日至2016年4月11日、2015年5月11日至2016年5月11日,11/06/2015 至 11/06/2016。

对于剩余的部分,我看到差异为 366.0。

我的问题是,为什么我们只在这几个日期看到这种奇怪的行为。当 date.getTime 总是返回自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数时,它有什么问题。

最佳答案

使用日期时间 API。由于 Java 8 有了这个,你应该像这样使用它:

private static boolean isYearBetween(String start, String end) {
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate startDate = LocalDate.parse(start, pattern);
LocalDate endDate = LocalDate.parse(end, pattern);

Period between = Period.between(startDate, endDate).normalized();

return Period.ofYears(1).equals(between.isNegative() ? between.negated() : between);
}

关于java - 显示浮点值的日期之间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com