web-dev-qa-db-fra.com

Ruby Conversion de chaîne en date

Je suis confronté à un problème dans Ruby sur Rails. Je cherche à convertir une chaîne de format Tue, 10 Aug 2010 01:20:19 -0400 (EDT)] en un objet de date.

Y at-il de toute façon je pourrais le faire.

Voici ce que j'ai regardé et essayé avec ce qui suit sans succès:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. Analyseur chronique
  3. Ruby: convertir une chaîne en date
  4. Date d'analyse du texte utilisant Ruby

S'il vous plaît aidez-moi avec ça.

67
dkris

Qu'est-ce qui ne va pas chez Date.parse méthode?

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

Cela semble fonctionner.

Le seul problème ici est le fuseau horaire. Si vous voulez une date dans le fuseau horaire UTC, il vaut mieux utiliser Time object, supposons que nous ayons la chaîne:

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

Je ne trouvais pas de méthode plus simple pour convertir Time en Date.

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

Devrait être:

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

Vous pouvez essayer https://rubygems.org/gems/dates_from_string :

Trouver la date dans la structure:

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"]
1
Sergey Chechaev