3 回答

TA贡献1818条经验 获得超8个赞
我刚刚发现了这个来自Groovy的快速解决方案:
import groovy.time.TimeCategory
import groovy.time.TimeDuration
TimeDuration td = TimeCategory.minus( stop, start )
println td

TA贡献1802条经验 获得超4个赞
您可以使用除法和mod进行所有这些操作。
long l1 = start.getTime();
long l2 = stop.getTime();
long diff = l2 - l1;
long secondInMillis = 1000;
long minuteInMillis = secondInMillis * 60;
long hourInMillis = minuteInMillis * 60;
long dayInMillis = hourInMillis * 24;
long elapsedDays = diff / dayInMillis;
diff = diff % dayInMillis;
long elapsedHours = diff / hourInMillis;
diff = diff % hourInMillis;
long elapsedMinutes = diff / minuteInMillis;
diff = diff % minuteInMillis;
long elapsedSeconds = diff / secondInMillis;
那应该给您您要求的所有信息。
编辑:由于人们似乎很困惑,不,这不会考虑leap年或夏令时切换等问题。这是纯粹的消逝时间,这就是打开要求的时间。

TA贡献1827条经验 获得超9个赞
使用标准的Date API并不是那么容易。
您可能要看Joda Time或JSR-310。
我不是Joda的专家,但是我认为代码是:
Interval interval = new Interval(d1.getTime(), d2.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());
添加回答
举报