2010-08-30 14 views

risposta

103

Cosa c'è che non va nel metodo Date.parse?

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

Sembra funzionare.

L'unico problema qui è il fuso orario. Se si desidera che la data nel fuso orario UTC, allora è meglio usare Time oggetto, supponiamo di avere stringa:

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 

non riuscivo a trovare il metodo più semplice per convertire Time a Date.

+0

Grazie klew e Ryan. Questo ha funzionato come un fascino. Ero a conoscenza di Date.parse, ma non l'avevo usato. Questo è un apprendimento per me. – dkris

+1

Ruby 1.9 ha tempo # to_date per convertire l'ora in data. – steenslag

12
Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z") 

dovrebbe essere:

Date.strptime(updated, '%a, %d %b %Y %H:%M:%S %Z') 
5
str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)" 
str.to_date 
=> Tue, 10 Aug 2010 
+1

questa è una cosa di Rails, non una cosa di Ruby, penso che sia –

+0

sì, solo su rotaie http://apidock.com/rails/String/to_date –

1

Si può provare https://rubygems.org/gems/dates_from_string: data

Trova nella struttura:

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"]