繁体   English   中英

计时器 - 如何使用Joda Time计算两个日期之间的差异?

[英]Timer - How do I calculate the difference between two dates using Joda Time?

我希望使用Joda Time获得两次P(开始时间)和Q(结束时间)之间的差异。 P和Q可以是不同日期甚至同一天的时间。 我希望得到格式HH-MM-SS的差异,其中H =小时,M =分钟,S =秒。

我想在计时器中使用此功能。 我假设没有人会使用我的计时器测量超过24小时。

请指导我这样做。

看看Joda time FAQ 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));

我很欣赏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是微不足道的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM