繁体   English   中英

Joda-time,期间计算问题?

[英]Joda-time, Period calculate issue?

以下代码返回相同的结果,相差 5 年。 应该是 5Y、5Y1D 和 5Y2D?

val date1 = org.joda.time.LocalDate(2025,2,28) 
val date2 = org.joda.time.LocalDate(2019,11,28).plusMonths(3) 
val ddd = org.joda.time.Period(date2, date1)
println("${ddd.years} ${ddd.months} ${ddd.days}")

val date1 = org.joda.time.LocalDate(2025,2,28) 
val date2 = org.joda.time.LocalDate(2019,11,29).plusMonths(3) 
val ddd = org.joda.time.Period(date2, date1) 
println("${ddd.years} ${ddd.months} ${ddd.days}")

val date1 = org.joda.time.LocalDate(2025,2,28) 
val date2 = org.joda.time.LocalDate(2019,11,30).plusMonths(3) 
val ddd = org.joda.time.Period(date2, date1) 
println("${ddd.years} ${ddd.months} ${ddd.days}")

不,不应该。

首先,当 2019 年 11 月 28 日、29 日或 30 日加上三个月时,您会得到 28、29 和 29(.) 2020 年 2 月,2020 年是闰年,所以 2 月有 29 天。 不是30,下一步? 从 2020 年 2 月 29 日到 2025 年 2 月 28 日这段时间是多少。它的定义不是很明确,您可能会争辩说它不到 5 年? 也许4年11个月30天,但是。 Joda-Time 选择将其视为 5 年,因为这两个日期都在月底。

我推荐使用java.time以获得更准确的结果。

您可以将代码重构为:

fun main() {
    var javaDate1 = java.time.LocalDate.of(2025,2,28)
    var javaDate2 = java.time.LocalDate.of(2019,11,28).plusMonths(3)
    var jd = java.time.Period.between(javaDate2, javaDate1)
    println(
        "Between ${javaDate2} and ${javaDate1} are ${jd.years} years, ${jd.months} months and ${jd.days} days")

    javaDate1 = java.time.LocalDate.of(2025,2,28)
    javaDate2 = java.time.LocalDate.of(2019,11,29).plusMonths(3)
    jd = java.time.Period.between(javaDate2, javaDate1)
    println(
        "Between ${javaDate2} and ${javaDate1} are ${jd.years} years, ${jd.months} months and ${jd.days} days")

    javaDate1 = java.time.LocalDate.of(2025,2,28)
    javaDate2 = java.time.LocalDate.of(2019,11,30).plusMonths(3)
    jd = java.time.Period.between(javaDate2, javaDate1)
    println(
        "Between ${javaDate2} and ${javaDate1} are ${jd.years} years, ${jd.months} months and ${jd.days} days")
}

运行它并得到以下结果:

Between 2020-02-28 and 2025-02-28 are 5 years, 0 months and 0 days
Between 2020-02-29 and 2025-02-28 are 4 years, 11 months and 30 days
Between 2020-02-29 and 2025-02-28 are 4 years, 11 months and 30 days

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM