提问人:dynamo 提问时间:11/15/2023 最后编辑:dynamo 更新时间:11/15/2023 访问量:75
从 java 8 迁移到 java 11 导致一些使用 joda.time [已关闭] 的测试失败
Moving from java 8 to java 11 has caused some tests to fail which use joda.time [closed]
问:
编辑:一些问题的更新 - 对不起,我缺少细节
- 原始版本 - 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 之外,还有其他解决方法吗 - 该项目规模庞大,并不像进行替换那么简单。
答: 暂无答案
评论
startOfDayTime
getGasDayHour
System.out.println(org.joda.time.DateTimeZone.getDefault())
getGasDayHour
不足以提供可重现的例子。你能写一个简单的main方法来重现你的问题吗?