Frage

Ich bin Refactoring einen Code für eine Ruby-Bibliothek. Dieser Code enthält einen Date-Parser. Einer der Tests war es, diese Zeichenfolge zu analysieren "2008-02-20T8: 05: 00-010: 00", die ISO 8601 .

Der vorherige Code würde tatsächlich ausgegeben: „Mi 20. Februar 18.05.00 UTC 2008“. Mein neuer Code gibt, dass. „Mi 20. Februar 16.05.00 UTC 2008“

Meine Frage ist: welches ist die richtige

?

Time.parse in Ruby gibt die zweite. Aber noch einmal, ich will zu 100% sicher sein, dass der vorherige Code und Test war fehlerhaft.

Welche ist richtig? (Von vielleicht in einer anderen Sprache die Zeichenfolge mit einer Bibliothek Parsen -. Ich weiß nur, Rubin)

War es hilfreich?

Lösung

Die korrekte UTC-Zeit ist 1805. Die Zeitgruppe 0805 in der Zone anzeigt, -10, so zu bekommen UTC die 10 zu der gegebenen Zeit hinzuzufügen. So 1805. Seit 1805 ist weniger als 2400 es noch am selben Tag ist.

Wenn Ihr Code 1605 geben, dann haben Sie mit ziemlicher Sicherheit der Zeitzone nicht richtig eingestellt -8 Zone, die Pacific Standard Time passiert sein.


Aha, sieht aus wie Ihr Eingabeformat ist vermasselt. Beachten Sie:

irb(main):003:0> Time.parse("2008-02-20T8:05:00-010:00") 
=> Wed Feb 20 08:05:00 -0700 2008

Ich bin zufällig in der Zone sein -7 so ist es, dass auf meine locale suiting. Aber

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):005:0> t
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):006:0> t.getutc
=> Wed Feb 20 15:05:00 UTC 2008

Ich bin immer ein unerwartetes Ergebnis. Jetzt beachten:

irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
=> Wed Feb 20 11:05:00 -0700 2008
irb(main):008:0> t.getutc
=> Wed Feb 20 18:05:00 UTC 2008

Es gibt das erwartet Ergebnis. Sieh den Unterschied? Erstes Beispiel vs Sekunde:

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")

ich die unechte out zusätzliche 0 nahm (die I sicherlich nicht bemerkt entweder) und zack, es funktioniert.

Andere Tipps

Ich weiß, das ist ziemlich alt, aber ich lief nur über sie.

ich wette, dass etwas irgendwo 010 als interpretiert Oktal Zahl mit dem Wert 8. Vielleicht ist es ein Fehler in der Implementierung von Time.parse()?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top