我試圖找到兩個日期之間的差異,並以 「0年0個月0天0小時0分0秒」的格式顯示它。我創建了一個方法,它需要兩個DateTime
對象並返回一個表示差異的字符串。爲什麼Joda-Time-2.3返回不正確的區別?
這裏是方法:
public static String getReadableDifference(DateTime start, DateTime end){
int years = Years.yearsBetween(start, end).getYears();
end = end.minusYears(years);
int months = Months.monthsBetween(start, end).getMonths();
end = end.minusMonths(months);
int days = Days.daysBetween(start, end).getDays();
end = end.minusDays(days);
int hours = Hours.hoursBetween(start, end).getHours();
end = end.minusHours(hours);
int minutes = Minutes.minutesBetween(start, end).getMinutes();
end = end.minusMinutes(minutes);
int seconds = Seconds.secondsBetween(start, end).getSeconds();
StringBuilder returnString = new StringBuilder();
if(years != 0){
returnString.append(years);
returnString.append(" years ");
}
if(months != 0){
returnString.append(months);
returnString.append(" months ");
}
if(days != 0){
returnString.append(days);
returnString.append(" days ");
}
if(hours != 0){
returnString.append(hours);
returnString.append(" hours ");
}
if(minutes != 0){
returnString.append(minutes);
returnString.append(" minutes ");
}
if(seconds != 0){
returnString.append(seconds);
returnString.append(" seconds ");
}
return returnString.toString();
}
我然後創建了兩個DateTime
對象以及使用該方法計算出的差值。如果我初始化DateTime
對象的話,(在這種情況下start
等於2014-03-28T12:56:38.137+01:00
和end
將受益於完整的程序文件中讀取。)
DateTime start = new DateTime();
DateTime end = DateTime.parse("2015-03-28T12:56:35.137+01:00");
輸出結果將是11 months 31 days -3 seconds
,但如果我初始化DateTime
對象像這樣,
DateTime now = DateTime.parse(new DateTime().toString());
DateTime end = DateTime.parse("2015-03-28T12:56:35.137+01:00");
輸出結果將作爲11 months 30 days 23 hours 59 minutes 57 seconds
會在原來的初始化預期。
我的問題是:爲什麼第一個初始化方法產生不正確的輸出,爲什麼第二個方法產生正確的輸出,爲什麼輸出不一樣?
雖然它並不能說明問題,這是獲得時間差的方法,我決定用:
String string = new Period(start, end, PeriodType.yearMonthDayTime())
.toString(new PeriodFormatterBuilder()
.appendYears().appendSuffix(" year", " years").appendSeparator(" ")
.appendMonths().appendSuffix(" month", " months").appendSeparator(" ")
.appendDays().appendSuffix(" day", " days").appendSeparator(" ")
.appendHours().appendSuffix(" hour", " hours").appendSeparator(" ")
.appendMinutes().appendSuffix(" minute", " minutes").appendSeparator(" ")
.appendSeconds().appendSuffix(" second", " seconds").toFormatter());
出於好奇,你爲什麼不」你使用'Interval'? – fge
我只是在學習如何使用Joda-Time,你會如何使用'Interval'對象? – JavaCodeBuilder
請注意,'new DateTime()'總是會導致不同的結果,因爲當前時間會發生變化(時鐘不會停止)。所以如果你真的想比較兩種不同的算法,你應該使用固定的開始。 –