我想使用 Joda Time 获得两次 P(开始时间)和 Q(结束时间)之间的差异。P 和 Q 可以是不同日期甚至同一天的时间。我想获得 HH-MM-SS 格式的差异,其中 H=小时,M=分钟,S=秒。
我想在计时器中使用此功能。我假设没有人会使用我的计时器来测量超过 24 小时。
请指导我这样做。
查看 Joda 时间常见问题解答 http://joda-time.sourceforge.net/faq.html#datediff
您可以使用 aPeriodFormatter
来获取您选择的格式。试试下面的示例代码。
DateTime dt = new DateTime();
DateTime twoHoursLater = dt.plusHours(2).plusMinutes(10).plusSeconds(5);
Period period = new Period(dt, twoHoursLater);
PeriodFormatter HHMMSSFormater = new PeriodFormatterBuilder()
.printZeroAlways()
.minimumPrintedDigits(2)
.appendHours().appendSeparator("-")
.appendMinutes().appendSeparator("-")
.appendSeconds()
.toFormatter(); // produce thread-safe formatter
System.out.println(HHMMSSFormater.print(period));
我很欣赏 Joda 日期/时间 API。它提供了一些很酷的功能,如果我需要一个不可变的日历或它提供的一些深奥的日历选项,我会全力以赴。
虽然它仍然是一个外部 API。
所以......为什么在你不需要的时候使用它。在 Joda API 中,“即时”与 Java API“日期”完全相同(或非常接近)。这些都是围绕 long 的瘦包装器,表示 POSIX EPOCH UTC 时间(这是自 1970 年 1 月 1 日凌晨 00:00 UTC 以来经过的毫秒数。
如果您有两个 Instants 或两个 Dates,计算它们之间的天数是微不足道的,并且绝对不需要 Joda 库单独用于此目的:
public double computeDaysBetweenDates(Date earlier, Date later) {
long diff;
diff = later.getTime() - earlier.getTime();
return ((double) diff) / (86400.0 * 1000.0);
}
这假设一天中的秒数是 86400 ......这基本上是正确的。
一旦你有一个双精度的差异,将答案的小数部分(即一天的小数)转换为 HH:MM:SS 是微不足道的。