Ruby String to Date Konvertierung

73

Ich bin mit einem Problem in Ruby on Rails konfrontiert. Ich möchte eine Formatzeichenfolge Tue, 10 Aug 2010 01:20:19 -0400 (EDT)in ein Datumsobjekt konvertieren .

Gibt es sowieso ich könnte das tun.

Folgendes habe ich ohne Glück angeschaut und ausprobiert:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. Chronischer Parser
  3. Ruby: String in Datum konvertieren
  4. Analysieren des Datums aus Text mit Ruby

Bitte helfen Sie mir dabei.

dkris
quelle

Antworten:

135

Was ist falsch an der Date.parseMethode?

str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
date = Date.parse str
=> #<Date: 4910837/2,0,2299161>
puts date
2010-08-10

Es scheint zu funktionieren.

Das einzige Problem hierbei ist die Zeitzone. Wenn Sie ein Datum in der UTC-Zeitzone wünschen, ist es besser, ein TimeObjekt zu verwenden . Angenommen, wir haben eine Zeichenfolge:

str = "Tue, 10 Aug 2010 01:20:19 +0400"
puts Date.parse str
2010-08-10
puts Date.parse(Time.parse(str).utc.to_s)
2010-08-09

Ich konnte es nicht einfachere Methode zu konvertieren finden Timezu Date.

klew
quelle
Danke Klew und Ryan. Das hat wie ein Zauber gewirkt. Date.parse war mir bekannt, aber ich hatte es nicht benutzt. Das ist ein Lernen für mich.
dkris
1
Ruby 1.9 hat die Zeit # to_date, um die Zeit in das Datum umzuwandeln.
Steenslag
Was ist, wenn ich es in Tag / Monat / Jahr brauche, zB: 16.10.2015?
Jackson Jegatheesan
15
Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")

Sollte sein:

Date.strptime(updated, '%a, %d %b %Y %H:%M:%S %Z')
steenslag
quelle
8
str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
str.to_date
=> Tue, 10 Aug 2010
Wadester
quelle
6
Dies ist eine Rails-Sache, keine Ruby-Sache, denke ich
C. Louis S.
2

Sie können https://rubygems.org/gems/dates_from_string ausprobieren :

Datum in Struktur finden:

text = "get car from repair 2015-02-02 23:00:10"
dates_from_string = DatesFromString.new
dates_from_string.find_date(text)

=> ["2015-02-02 23:00:10"]
Sergey Chechaev
quelle