我希望使用Joda Time获得两次P(开始时间)和Q(结束时间)之间的差异。 P和Q可以是不同日期甚至同一天的时间。我希望得到格式HH-MM-SS的差异,其中H =小时,M =分钟,S =秒。
我想在计时器中使用此功能。我假设没有人会使用我的计时器测量超过24小时。
请指导我这样做。
答案 0 :(得分:19)
看看Joda时间常见问题解答 http://joda-time.sourceforge.net/faq.html#datediff
您可以使用PeriodFormatter
来获取您选择的格式。请尝试以下示例代码。
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));
答案 1 :(得分:1)
我很欣赏Joda日期/时间API。它提供了一些很酷的功能,如果我需要一个不可变的日历或它提供的一些深奥的日历选项,我会全身心投入。
它仍然是一个外部API。
所以...为什么在你不需要的时候使用它。在Joda API中,“Instant”与Java API“Date”(或非常接近它)完全相同。这些都是长整数的薄包装,代表POSIX EPOCH UTC时间的瞬间(这是自UTC时间1970年1月1日00:00以来经过的毫秒数。
如果您有两个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是微不足道的。