簡體   English   中英

如何使用 LocalTime 在 Java 中求和兩次?

[英]How to sum two times in Java, using LocalTime?

例子:

LocalTime time1 = LocalTime.of(12, 30);
LocalTime time2 = LocalTime.of(8, 30);
time1 + time2   // Doesn't work.
time1.plus(time2)   // Doesn't work.

我想以(小時:分鍾)的格式獲取兩次(12:30 + 8:30 = 21:00)的總和。

還有其他建議嗎?

您正在嘗試添加兩個LocalTime變量。 這是一個錯誤的概念。 你的time2不應該是LocalTime ,它應該是一個Duration 添加到時間的持續時間會給您另一次。 從時間中減去的時間為您提供持續時間。 這一切都很好,很合乎邏輯。 一起添加兩次不是。

有些黑客可能會將你的時間轉換為持續時間,但我強烈建議不要這樣做。 相反,重構您的代碼,以便time2首先是一個Duration

Mike Nakis的回答並非如此。

我的上述句子並不屬實。 我已經確認並只的Java 8已經LocalTime.of所以邁克Nakis的回答是完全正確的。 請看他的回答。

[此部分仍然保留。 LocalTime在joda庫中的LocalTime]

我會解釋:

在約達- 的持續時間表示以毫秒計的時間的持續時間。 持續時間通常從間隔獲得。 即我們可以從間隔的末尾開始減去以得出持續時間。

在約達- 時間段表示在一段時間中的字段來定義,例如,3年5月2天及7小時。 這與持續時間的不同之處在於它以毫秒為單位是不精確的。 通過指定相對於的時刻(包括時間順序和時區),只能將句點解析為精確的毫秒數。 例如,考慮1年的時間,如果我們將其添加到1月1日,我們將始終在1月1日到達,但持續時間將取決於干預年是否是閏年。

LocalTime是一個不可變的時間類,表示沒有時區的時間 因此,基於上面的定義,句點適合於為LocalTime添加時間。 事實上,API證明了這一點:

LocalTime localTime = new LocalTime(10, 30);
Duration d = new Duration(1, 0);
Period p = new Period(1, 0);
LocalTime newLocalTime = localTime.plus(d); // COMPILE ERROR
LocalTime newLocalTime = localTime.plus(p); // SUCCESS

你可以使用方法sum()

LocalTime time1 = LocalTime.of(12, 30);
LocalTime time2 = LocalTime.of(8, 30);
Integer hour1 = time1.getHour();
Integer hour2 = time2.getHour();
Integer minute1 = time1.getMinute();
Integer minute2 = time2.getMinute();

Integer first = Integer.sum(hour1,hour2);
Integer second = Integer.sum(minute1,minute2);

System.out.println("The time is "+ first + " : " + second);

它必須工作

你可以做以下......

LocalTime t1 = LocalTime.of(9, 0);  // 09:00
LocalTime t2 = LocalTime.of(2, 30); // 02:30
LocalTime total = t1.plusHours(t2.getHour())
                    .plusMinutes(t2.getMinute());  // 11:30
LocalTime t1 = LocalTime.parse('03:33:24')
LocalTime t2 = LocalTime.parse('03:13:41')

t1.plusHours(t2.hour)
  .plusMinutes(t2.minute)
  .plusSeconds(t2.second)
  .plusNanos(t2.nano)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM