Donnerstag, April 9, 2020

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.

Kommentare dem Thema
Zeit.nach ISO8601 scheint nicht zu existieren in Ruby 2.2.x. Keine Ahnung, wo es ging? — Egal, ich hatte nicht gesehen, dass Sie nur bekommen, wenn Sie explizit require "Zeit". Kommentarautor: David Moles

InformationsquelleAutor der Frage Chris McCauley | 2010-09-03

2 Kommentare

  1. 14

    Ja, aber leider ist es in Ruby 1.9.

    require "date"
    
    Date.iso8601("2010-W32-5").strftime
    #=> "2010-08-13" 

    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

  2. 9

    Konvertieren nach ISO8601 Datum in der lokalen Zeitzone:

    dt1 = Time.parse("2010-09-06T12:27:00.10-05:00")

    Konvertieren Sie ein Datum nach ISO8601 in UTC, dies zu tun:

    dt2 = Time.iso8601("2010-09-06T12:27:00.10-05:00")

    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

Kostenlose Online-Tests