这是我用joda时间计算参考时间的代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.joda.time.Interval;
import org.joda.time.Period;
public class DateDiff {
public static void main(String[] args) {
DateDiff obj = new DateDiff();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-DD hh:mm:ss");
try {
Date date1 = simpleDateFormat.parse("2015-10-01 20:32:06");
Date date2 = simpleDateFormat.parse("2015-10-25 00:52:36");
obj.printDifference(date1, date2);
} catch (ParseException e) {
}
}
public void printDifference(Date startDate, Date endDate){
Interval interval = new Interval(startDate.getTime(), endDate.getTime());
Period period = interval.toPeriod();
System.out.printf(
"%d years, %d months, %d days, %d hours, %d minutes, %d seconds%n",
period.getYears(), period.getMonths(), period.getDays(),
period.getHours(), period.getMinutes(), period.getSeconds());
}
}
以下是我的参考:http://www.mkyong.com/java/java-time-elapsed-in-days-hours-minutes-seconds/ 当我运行我收到的代码时:
0年,0个月,2天,4小时,20分钟,30秒
有人可以告诉我我的代码有什么问题吗?
答案 0 :(得分:1)
我已将“DD”更改为“dd'但结果仍然相同
嗯,这是因为您忽略了Period
个实例的某些内容:the weeks。
您需要输出如下所示的实例:
System.out.printf(
"%d years, %d months, %d weeks, %d days, %d hours, %d minutes, %d seconds%n",
period.getYears(), period.getMonths(), period.getWeeks(), period.getDays(),
period.getHours(), period.getMinutes(), period.getSeconds());
你会得到:
0年,0个月,3周,2天,4小时,20分钟,30秒
据我所见......它看起来是正确的。
如果您不想在这里使用这几周,那么您可以使用其他PeriodType
。例如:
Period period = interval.toPeriod(PeriodType.yearMonthDayTime());
这会创建一个只使用年,月,日和时间的类型,就像你想要的那样。
然后输出:
0年,0个月,23天,4小时,20分钟,30秒
答案 1 :(得分:1)
你工作太多,无法混合两个库的代码:
java.util.Date
和SimpleDateFormat
更好的解决方案是仅使用一个库,这里是Joda-Time的代码(因为旧世界根本不处理持续时间):
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt1 = LocalDateTime.parse("2015-10-01 20:32:06", f);
LocalDateTime ldt2 = LocalDateTime.parse("2015-10-25 00:52:07", f);
Period p = new Period(ldt1, ldt2, PeriodType.yearMonthDayTime());
String diff = PeriodFormat.wordBased(Locale.ENGLISH).print(p);
System.out.println(diff); // 23 days, 4 hours, 20 minutes and 1 second
与建议的混合解决方案相比的优势:
关于格式模式的一般建议:
请始终参考图书馆的documentation,使用了您可以使用的格式符号及其含义。阅读比猜测更好;-)。所有图书馆都没有独特的模式,但是" D"真的代表着"每年的日子"和" d"为"日期"在两个图书馆。
答案 2 :(得分:0)
第d
天很小。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
D Day in year
d Day in month