2016-05-11 6 views

答えて

2

これはモジュロ24算術の例です(modular arithmeticの詳細についてはこちらをご覧ください)。

時間は24の法則に合致し、24に対して合同(または等価)があります(例えば、1が合同(または同等)から25)。あなたはちょうど違いのモジュールを計算することができます。ただ、もう少し詳細に行くための

あなたの例では
(second_time - first_time) modulo 24 

(4 - 22) modulo 24 = -18 modulo 24 = 6 
(24 - 22) modulo 24 = 2 modulo 24 = 2 

EDIT。この回答は、質問に指定した詳細(つまり、0〜23時間)を考慮したものです。より複雑なものを実現しようとしている場合は、多くのコーナーケースと例外が考慮されます。

たとえば、私の方法では、0時から24時までの間に違いが得られません。それは同等の時間なので、特定のケースが必要です。いずれにしても、時刻がちょうど0から23までの場合、0時と0時との間の差は、それらが同じ時間か24時間後であるかによって異なります。 :00〜6:00、同じ日か+ N日ですか?)したがって、このあいまいさを解消するために日付を追加する必要があります。

タイムゾーン、うるう秒などを考慮している場合は、分を使用しているとさらに複雑になります。

あなたが使用している言語によっては、負の数よりもモジュロ演算子が複雑になる可能性があるので、サイクルタイムを追加することでそれを考慮する必要があります。その代わりに代わりに:

(second_time - first_time + 24) modulo 24 
+0

たとえば3と6はどうですか? –

+0

同じことが適用されます。 3と6の間の時間は次のようになります (6 - 3)24 = 3モジュロモジュロ24 = 3 間及び6と3: (3 - 6)24 = -3モジュロ24 = 21 モジュロ 私は以前の答えをさらに詳細に編集しました。明らかに誰かがそれが悪い答えだと思ったが、何が間違っていたのか気にしなかったからです。私はこれが今より良いと私は私の答えで何かがひどく間違っていることに気づいていないことを願っています。 – Vayolet

0

first_timeを最初に選択した時間とsecond_timeを2番目の選択した時間とする。

擬似コード:

if first_time > 12: 
    first_time = 24 - first_time 
if second_time < 12: 
    second_time = -second_time 
time_difference = abs(first_time - second_time) 

あなたは絶対差が必要な場合は、あなたがそれを除外することができ、他のABS()関数を使用することができます。

+0

たとえば約3と6は? –

+0

このロジックは、あなたが言及したケースでは失敗します.Vayoletによって記述されたモジュロ論理が正しい方法です。 – ajays20078

関連する問題