Gibt es eine vollständige Implementierung für ISO-8601-Datumsanalyse für Ruby?
Den Time.iso8601
Methode ist eine eingeschränkte Untermenge des ISO-8601.
- Was sind seine Grenzen?
- Kennt jemand eine vollständige Implementierung für Ruby? Ich bin mit dem MRT 1.8.7.
Update
Sieht es aus wie es gibt nicht eine einzige Klasse, die kümmert sich um all die verschiedenen 8601 für Datum und Datum/Zeit-Kombinationen. Aber ich habe es geschafft, zu arbeiten, um die Probleme sowohl auf der Date.parse
und Time.iso8601
Methoden. Der Nachteil ist, dass Sie brauchen, um zu entscheiden, in code, ob der input aussieht wie ein Datum oder ein Datum/Uhrzeit.
Warnung : Timezone Unterschiede
Time.iso8601
und Time.parse
anders Verhalten.
>> Time.parse("2010-09-06T12:27:00.10-05:00")
=> Mon Sep 06 18:27:00 +0100 2010
>> Time.iso8601("2010-09-06T12:27:00.10-05:00")
=> Mon Sep 06 17:27:00 UTC 2010
Unterschiede zwischen Zeit.nach ISO8601-und ISO-8601
Dieses Dokument berührt die Unterschiede zwischen dem, was im ISO-8601-und was ist unterstützt von Ruby. Die kurze Antwort ist, dass die Anzahl der möglichen Formate beschränkt ist.
require "Zeit"
. InformationsquelleAutor der Frage Chris McCauley | 2010-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, aber leider ist es in Ruby 1.9.
Glaube ich nicht, es sind alle Implementierungen für Ruby 1.8.7 (oder zumindest konnte ich keine finden). Sie könnte entweder versuchen, ein upgrade auf Ruby 1.9, die ist ziemlich stabil als der 1.9.2. Alternativ könnten Sie versuchen, analysieren die Daten selbst.
InformationsquelleAutor der Antwort molf
Konvertieren nach ISO8601 Datum in der lokalen Zeitzone:
Konvertieren Sie ein Datum nach ISO8601 in UTC, dies zu tun:
Vergleicht man die Daten zurückgegeben, die von den oben genannten Fragen, werden Sie identisch (D. H. dt1 === dt2). Jedoch, den Zugriff auf Datum Komponenten wie Jahr, Monat, Tag, Stunde, etc.) zurückkehren wird, geeignete Werte für die Zeitzone (entweder UTC oder lokal). Das gleiche gilt für strftime.
InformationsquelleAutor der Antwort Pete