Wie man die Zeit in Ruby vergleicht

8

Ich muss ein Time-Objekt als int (TimeObject.to_i) verwenden Dann muss ich ein int zurück in eine Zeit umwandeln, um mit der ursprünglichen Zeit zu vergleichen. Kurzes Beispiel

%Vor%

Warum sagt das seine falsche? Wenn ich beide Zeitobjekten drucke, zeigt dasselbe D:

%Vor%

sie sind die gleiche Sache D: aber wenn Sie versuchen, mit == oder eql zu vergleichen? sagt sie sind anders (Entschuldigung für mein schlechtes Englisch)

    
Robinson Hernandez 06.01.2012, 19:06
quelle

1 Antwort

13

Antwort

%Vor%

Erläuterung:

  

eql? (other_time)

     

Geben Sie true zurück, wenn time und other_time beide Zeitobjekte mit den gleichen Sekunden und Sekundenbruchteilen sind.

Link: Zeit # eql?

Offensichtlich werden Bruchteile von Sekunden bei der Ausführung von #to_i gelöscht und die wiederhergestellte Zeit entspricht nicht genau der ursprünglichen Zeit. Aber wenn wir zwei Kopien wiederherstellen, sind sie gleich.

Man könnte denken: "Hey, lass uns #to_f dann benutzen!". Aber, überraschend, die Ergebnisse sind die gleichen! Vielleicht ist es wegen Rundungsfehlern oder Fließkomma-Vergleich nicht sicher.

Alternative Antwort

Konvertieren Sie die Ganzzahl nicht zurück in die Zeit für den Vergleich. Konvertiere die Originalzeit stattdessen in int!

%Vor%     
Sergio Tulentsev 06.01.2012, 19:10
quelle

Tags und Links