从 java 8 迁移到 java 11 导致一些使用 joda.time [已关闭] 的测试失败

Moving from java 8 to java 11 has caused some tests to fail which use joda.time [closed]

提问人:dynamo 提问时间:11/15/2023 最后编辑:dynamo 更新时间:11/15/2023 访问量:75

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

4天前关闭。

编辑:一些问题的更新 - 对不起,我缺少细节

  • 原始版本 - 1.6
  • 当前(已升级到)版本 - 2.12.5
  • startOfDayTime - org.joda.time.LocalTime 对象
  • 系统时区 - UTC

最近升级了一个技术堆栈 - 从 java 8 移动到 java 11 - 我发现一些单元测试在我的应用程序中测试与日期/时间等相关的某些方法失败。

例如,这是一个现在失败的测试

assertEquals(24, gasDayRoot.getGasDayHour(new DateTime(2007, 10, 28, 6, 0, 0, 0)));它现在返回 23 而不是 24。

但是用 999 传入毫秒测试相同的方法 - 它通过了?

assertEquals(24, gasDayRoot.getGasDayHour(new DateTime(2007, 10, 28, 6, 0, 0, 999)));

这是参考的方法

public int getGasDayHour(DateTime dateTime) {

    DateTime startOfDay;

    if (dateTime.getHourOfDay() < startOfDayTime.getHourOfDay()) {
        startOfDay = dateTime.withTime(startOfDayTime.getHourOfDay(), 0, 0, 0).minusDays(1);
    } else {
        startOfDay = dateTime.withTime(startOfDayTime.getHourOfDay(), 0, 0, 0);
    }

    return Hours.hoursBetween(startOfDay, dateTime).getHours();
}

谁能解释一下为什么会这样?除了迁移到 java.time 之外,还有其他解决方法吗 - 该项目规模庞大,并不像进行替换那么简单。

日期 java-8 jodatime java-11

评论

1赞 tquadrat 11/15/2023
我们需要知道测试期间处于活动状态的时区,以及使用 Java 8 进行测试时是否相同。
0赞 aled 11/15/2023
应用程序使用的是哪个 Joda 时间版本?
2赞 rzwitserloot 11/15/2023
@dynamo这个问题非常广泛,没有更多细节;我认为没有人会在没有它的情况下回答。因此,编辑问题并添加以下详细信息: [1] 您的方法中有什么?[2] joda所理解的系统时区是什么?最好的办法是运行,并且可能有用 [3] 哪个确切版本的 joda?startOfDayTimegetGasDayHourSystem.out.println(org.joda.time.DateTimeZone.getDefault())
2赞 samabcde 11/15/2023
getGasDayHour不足以提供可重现的例子。你能写一个简单的main方法来重现你的问题吗?
0赞 dynamo 11/15/2023
嘿,感谢您的回复 - 我现在已经更新了帖子,提供了更多信息。希望这会有所帮助

答: 暂无答案