![](/img/trans.png)
[英]How to calculate difference between two dates in years…etc with 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.