2016-05-11 7 views

Antwort

2

Dies ist ein Beispiel für eine Modulo 24-Arithmetik (weitere Informationen zu modular arithmetic).

Zeiten sind kongruent modulo 24, es gibt eine Kongruenz (oder Äquivalenz) in Bezug 24 (z. B. 1 ist kongruent (oder gleichwertig) zu 25). Sie könnten einfach das Modul der Differenz berechnen.

(second_time - first_time) modulo 24 

In Ihrem Beispiel

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

EDIT:

einfach in etwas mehr Detail zu gehen. Diese Antwort berücksichtigt nur die Details, die Sie in Ihrer Frage angegeben haben, d. H. Stunden von 0-23 Uhr. Wenn Sie versuchen, etwas Komplexeres zu erreichen, gibt es viele Eckfälle und Ausnahmen zu berücksichtigen.

Zum Beispiel, mit meiner Methode könnten Sie keinen Unterschied zwischen 0:00 und 24:00 bekommen, weil sie eine äquivalente Zeit sind, so dass Sie einen bestimmten Fall dafür benötigen würden. Wie auch immer, wenn die Zeiten nur wie angegeben von 0 bis 23 genommen werden, würde die Differenz zwischen 0:00 und 0:00 davon abhängen, ob sie die gleiche Zeit oder 24 Stunden später sind, dies würde mit zwei gleichen Zeiten geschehen (6 : 00 bis 6:00, ist es der gleiche Tag oder + N Tage?). Sie müssten also ein zusätzliches Datum haben, um diese Mehrdeutigkeit zu lösen.

Weitere Komplikationen treten auf, wenn Sie Minuten verwenden, wenn Sie Zeitzonen, Schaltsekunden und dergleichen berücksichtigen.

Abhängig von der Sprache, die Sie verwenden, könnten Sie mit dem Modulo-Operator Probleme mit negativen Zahlen haben, also sollten Sie auch darüber nachdenken (das Hinzufügen der Zykluszeit würde das Problem beheben). Also statt:

(second_time - first_time + 24) modulo 24 
+0

was ist zum Beispiel 3 und 6? –

+0

Gleiches gilt. Die Zeit zwischen 3 und 6 wäre: (6 - 3) modulo 24 = 3 Modulo 24 = 3 Und zwischen und 6 und 3: (3 bis 6) modulo 24 = -3 Modulo 24 = 21 Ich habe auch meine vorherige Antwort mit etwas mehr Details bearbeitet, weil anscheinend jemand dachte, dass es eine schlechte Antwort war, aber nicht interessiert war zu erklären, was falsch war. Ich hoffe, dass es jetzt besser ist und dass mir in meiner Antwort nicht etwas schrecklich falsch ist. – Vayolet

0

Nehmen wir an, dass first_time bis zur ersten ausgewählten Stunde und second_time die zweite ausgewählte Stunde ist.

Pseudo-Code:

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

Wenn Sie absolute Differenz benötigen, können Sie eine Funktion abs() sonst verwenden Sie das ausschließen.

+0

was ist mit 3 und 6 zum Beispiel? –

+0

Diese Logik schlägt für den von Ihnen erwähnten Fall fehl, die von Vayolet beschriebene Modulo-Logik ist der richtige Weg. – ajays20078