gpt4 book ai didi

java - 用逗号和闰年比较年份中的两个日期

转载 作者:行者123 更新时间:2023-12-05 02:34:38 24 4
gpt4 key购买 nike

互联网上有很多关于如何比较两个日期之间的差异的条目。但是,我仍然没有找到适合我的解决方案。

简而言之:我正在寻找与 dayjs(javascript 库 - dayJs)函数 diff 等价的参数“years”和一个逗号。这样我就得到了输出(示例):7.645161290322581 年

const date1 = dayjs('2019-01-25')
date1.diff('2012-06-05', 'year', true) // 6.639424491947131

between 是一个不错的解决方案。不幸的是,下面的代码只给出了没有逗号的年份。

long diff = ChronoUnit.YEARS.between(date1, date2);

遗憾的是,这个解决方案只给我 6 年,而不是 6.639424491947131。

我找到了其他解决方案,但它们没有考虑闰年。

有人可以帮我吗

//编辑

感谢您的回答。然而,天不是一个选项。我需要带逗号的年份。将 7.49 更改为 6.639424491947131

天/365 是不准确的。有时有闰年,有时没有。

最佳答案

tl;dr

ChronoUnit
.DAYS
.between(
LocalDate.parse( "2012-06-05" ) ,
LocalDate.parse( "2019-01-25" )
)
/
365.2425d

查看此 code run live at IdeOne.com .

6.639424491947131

详情

为什么不使用天数呢?这就是日期之间年份的小数部分的含义:天数。小数到 15 位会造成精度错觉,而在比较两个日期时实际上并不存在这种错觉。

LocalDate start = LocalDate.parse( "2012-06-05" ) ;
LocalDate end = LocalDate.parse( "2019-01-25" ) ;

long daysElapsed = ChronoUnit.DAYS.between( start , end ) ;

如果您坚持要分数,请除以对您有意义的每年天数的分数。

公历 400 年周期中每年的天数是 365.2425

double DAYS_PER_YEAR = 365.2425d ;
double yearsElapsed = ( daysElapsed / DAYS_PER_YEAR ) ;

为了准确性,请使用 BigDecimal 而不是 double

关于java - 用逗号和闰年比较年份中的两个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70731761/

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