2017-04-23 51 views
-2

時間と分で2回あります。時間の差を計算する式

time[0]: hour1 
time[1]: minutes1 
time[2]: hour2 
time[3]: minutes2 

私は分単位で時間の差を計算し、この計算式を作成しました:これまでの任意のエッジケースがある場合、私は思っていた

((time[2] % 12 - time[0] % 12) * 60) + (time[3] - time[1]) 

。さらに、この式を作成するために従うべきパラダイムは何ですか(非常に基本的ですが)。

+0

あなたのアルゴリズムは間違っています。 'hour1'が9、' hour2'が23( 'minutes1'と' minutes2'が0であると仮定します)の場合はどうなりますか? –

答えて

0

代わりにDateクラスであなたの時間を表現してから差を計算し、あなたの選択した時間単位で表現することができます。

この方法を使用すると、多くのトリッキーなケース(2つの異なる日に2回の違い、時間の変更など)を回避できます。

私はあなたにこのpostこのpostの読書をお勧めしますが、StackOverflowの上、この全く同じ質問に対する多くの答えがあります。

注):Dateを使用する前に、この優れた投稿に見て:What's wrong with Java Date & Time API?

0

あなたのコードでは、日数は24時間と想定しています。すべての日が24時間というわけではありません。夏時間(DST)の平均日数などの異常は長さが異なります。

また、このために既にクラスが用意されています。あなた自身をロールバックする必要はありません。 LocalTimeクラスは、日付がなく時間帯がない時間帯を表します。 Durationは、タイムラインに添付されていない期間を表します。

LocalTime start = LocalTime.of(8 , 0) ; 
LocalTime stop = LocalTime.of(14 , 0) ; 

Duration d = Duration.between(start , stop); 
long minutes = d.toMinutes() ; // Entire duration as a total number of minutes. 

そのコードもあまりにも長さが24時間です。

現実的な時間帯では、ZonedDateTimeクラスを使用して、時刻とともに日付とタイムゾーンを含めます。