DateTime.plusMinutes(..) return 分钟 -1
DateTime.plusMinutes(..) return minutes -1
我在使用 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 分钟。
好的,感谢@Benoit 的评论,我现在修复了它。我将方法 calculateTimeRemaining
更改为:
public double calculateTimeDifference(String startedAt) {
DateTime utc = new DateTime(DateTimeZone.forID("CET"));
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss'Z'");
DateTime convertedStartedAt = formatter.parseDateTime(startedAt);
Period period = new Period(utc, convertedStartedAt);
double hours = period.getHours();
double minutes = period.getMinutes();
return hours + Math.round(minutes * 10.0/ 60)/10.0;
}
谢谢大家!
我在使用 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 分钟。
好的,感谢@Benoit 的评论,我现在修复了它。我将方法 calculateTimeRemaining
更改为:
public double calculateTimeDifference(String startedAt) {
DateTime utc = new DateTime(DateTimeZone.forID("CET"));
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss'Z'");
DateTime convertedStartedAt = formatter.parseDateTime(startedAt);
Period period = new Period(utc, convertedStartedAt);
double hours = period.getHours();
double minutes = period.getMinutes();
return hours + Math.round(minutes * 10.0/ 60)/10.0;
}
谢谢大家!