我在使用 JodaTime 时遇到问题。这是我的方法:
public double calculateTimeDifference(String startedAt) {
DateTime cet = new DateTime(DateTimeZone.forID("CET"));
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss'Z'");
DateTime convertedStartedAt = formatter.parseDateTime(startedAt);
Period period = new Interval(cet, convertedStartedAt).toPeriod();
int minutes = period.getMinutes();
return minutes;
}
我有一个测试,时间增加了 30 分钟:
@Test
public void testTimeDifference() {
DateTime testtime = new DateTime(DateTimeZone.forID("CET")).plusHours(2);
testtime = testtime.plusMinutes(30);
// Format for input
DateTimeFormatter cet = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
// Parsing the date
DateTime requestedFormat = cet.parseDateTime(testtime.toString());
// Format for output
DateTimeFormatter requestedTime = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss'Z'");
double time = carService.calculateTimeDifference(requestedTime.print(requestedFormat));
assertEquals(30, time, 0.0);
}
但是当我运行这个时,输出是:
Expected : 30.0
Actual : 29.0
最佳答案
原因是您生成了两倍的当前日期和时间: 一旦到这里:
DateTime testtime = new DateTime(DateTimeZone.forID("CET")).plusHours(2);
这里:
DateTime utc = new DateTime(DateTimeZone.forID("CET"));
因此,实际差异是 29 分 59 秒和 360 毫秒(在我的测试中),四舍五入为 29 分钟。
关于java - DateTime.plusMinutes(..) 返回分钟 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53517298/