簡體   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