我试图找到两个日期之间的差异并以格式显示
" 0年0个月0天0小时0分0秒"。我创建了一个方法,它接受两个DateTime
个对象,并返回一个表示差异的字符串。
以下是方法:
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());
答案 0 :(得分:3)
您的问题必须在代码中的其他位置,可能您正在修改开始/现在日期。
以下结果相同:
DateTime start = new DateTime();
DateTime now = DateTime.parse(start.toString());
DateTime end = DateTime.parse("2015-03-28T12:56:35.137+01:00");
System.out.println("Start=" + start);
System.out.println("Now =" + now);
你也可以使用JodaTime的Period来做漂亮的打印,也许更容易阅读:
Period period = new Period(start, end, PeriodType.yearMonthDayTime());
System.out.print(period.getYears() + " years, ");
System.out.print(period.getMonths() + " months, ");
// etc.