当前位置 博文首页 > 逐墨飞扬的博客:Joda-Time 计算两个时间差(年,月,星期,日,
import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.joda.time.Period;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class DiffDateTime {
/**
* Joda-Time 计算两个时间差(年,月,星期,日,小时,分钟,秒,毫秒) 注: 开始时间 和 结束时间 格式须相同
* @param startDateTime 开始时间
* @param endDateTime 结束时间
* @param dateTimeType 时间格式(2018年01月20日 21:02:37(yyyy年MM月dd日 HH:mm:ss))
*/
public static void calculateTimeDifference(String startDateTime, String endDateTime, String dateTimeType) {
DateTimeFormatter format = DateTimeFormat.forPattern(dateTimeType);
DateTime dateTimeStart = format.parseDateTime(startDateTime);
DateTime dateTimeEnd = format.parseDateTime(endDateTime);
if (dateTimeStart.isAfter(dateTimeEnd)) {
DateTime temp = dateTimeStart;
dateTimeStart = dateTimeEnd;
dateTimeEnd = temp;
}
Interval interval = new Interval(dateTimeStart.getMillis(), dateTimeEnd.getMillis());
Period p = interval.toPeriod();
System.out.println(p.toString());
System.out.printf("两个日期的时间差:%d 年 %d 个月 %d 星期 %d 天 %d 小时 %d 分钟 %d 秒 %d 毫秒\n",
p.getYears(), p.getMonths(), p.getWeeks(), p.getDays(), p.getHours(), p.getMinutes(), p.getSeconds(), p.getMillis());
}
}
注: 开始时间 和 结束时间 格式 必须相同
public static void main(String[] args) {
calculateTimeDifference("2018年01月20日 21:02:37", "2019年03月01日 13:24:46", "yyyy年MM月dd日 HH:mm:ss");
calculateTimeDifference("2018年01月27日", "2019年03月07日", "yyyy年MM月dd日");
calculateTimeDifference("2019年03月01日", "2018年01月20日", "yyyy年MM月dd日");
}
P1Y1M1W1DT16H22M9S
两个日期的时间差:1 年 1 个月 1 星期 1 天 16 小时 22 分钟 9 秒 0 毫秒
P1Y1M1W1D
两个日期的时间差:1 年 1 个月 1 星期 1 天 0 小时 0 分钟 0 秒 0 毫秒
P1Y1M1W2D
两个日期的时间差:1 年 1 个月 1 星期 2 天 0 小时 0 分钟 0 秒 0 毫秒
cs