2017-11-07 1 views
1

Wie vergleiche man zwei Stunden in Erlang? Der Fall ist der folgende, Ich habe ein Zeitlimit, um eine Transaktionsumkehr durchzuführen zB: 30 Minuten, wenn die Zeit der Transaktion, die rückgängig gemacht werden soll, vor mehr als 30 Minuten I sollte die Transaktion nicht rückgängig gemacht werden. Aber ich muss in der Lage die Stunden zu vergleichen (aus der Transaktion möchte ich zurück und jetzt Stunde) und ich kann keine erlang Funktion finden, die Stunden vergleicht, kann mir jemand helfen?Wie zwei Stunden in Erlang zu vergleichen?

LocalTime = calendar:local_time() 
{{2017,11,7},{9,43,32}} 
TransactionToRevertTime = {{2017,11,7},{9,23,36}} 

Antwort

3

Sie können calendar:datetime_to_gregorian_seconds/1 verwenden, um die zwei Datetimes auf ganze Zahlen zu konvertieren, subtrahieren sie, und überprüfen, ob ihre Differenz größer als 30 * 60:

1> A = {{2017,11,7},{9,43,32}}. 
{{2017,11,7},{9,43,32}} 
2> B = {{2017,11,7},{9,23,36}}. 
{{2017,11,7},{9,23,36}} 
3> C = {{2017,11,7},{9,0,36}}. 
{{2017,11,7},{9,0,36}} 
4> A1 = calendar:datetime_to_gregorian_seconds(A). 
63677267012 
5> B1 = calendar:datetime_to_gregorian_seconds(B). 
63677265816 
6> C1 = calendar:datetime_to_gregorian_seconds(C). 
63677264436 
7> A1 - B1 > 30 * 60. 
false 
8> A1 - C1 > 30 * 60. 
true 

Wenn A jetzt ist, B ist weniger als 30 Minuten vor, während C ist vor mehr als 30 Minuten.

+0

Vielen Dank für Ihre Hilfe Dogbert – mdely86

1

Vom Erlang Docs:

„Zeitstempel mit erlang:monotonic_time/0 nehmen und die Zeitdifferenz mit gewöhnlicher Subtraktion berechnen“

Werfen Sie einen Unterschied zwischen zwei Anrufen zu den monotonic_time(second) und wenn die Differenz ist es größer als 1800, mehr als 30 Minuten sind vergangen.

+3

Wahrscheinlich besser, 'monotonic_time/1' mit' second' zu verwenden und mit '1800' zu vergleichen, anstatt sich auf den nativen Zeiteinheitenwert zu verlassen (der nicht garantiert ist, dass er im Nanosekundenbereich liegt). – Dogbert

+0

Dank @Dogbert, ich habe die Antwort aktualisiert, um Ihren Kommentar zu reflektieren. –

+0

Danke, aber ich benutze Dogbert Weg, seine Erklärung war klarer, ich bin neu in Erlang und seine Lösung war diejenige, die ich klarer gesehen habe. – mdely86