119 votes

convertir String en DateTime

Je dois analyser la chaîne suivante en un objet DateTime :
30/Nov/2009:16:29:30 +0100

Y a-t-il un moyen facile de le faire ?

PS : Je veux convertir la chaîne ci-dessus telle quelle. Les deux points après l'année ne sont pas une faute de frappe. Je veux également résoudre le problème avec Ruby et non RoR.

126voto

xentek Points 878

Cela ne devrait-il pas également fonctionner pour Rails ?

"30/Nov/2009 16:29:30 +0100".to_datetime

0 votes

Cela continue pour moi sur mri ruby 1.9.2, j'aurais probablement dû le mentionner quand j'ai posté le snippet.

1 votes

Fonctionne bien dans Rails 3.2.3 avec Ruby 1.9.3 ... "2012-05-16 02:30 UTC".to_datetime => Wed, 16 May 2012 02:30:00 +0000

71 votes

Il s'agit également d'une méthode Ruby on Rails, et non d'une méthode Ruby.

116voto

Kaleb Brasee Points 25776

DateTime.strptime vous permet de spécifier le format et de convertir une chaîne de caractères en une date et une heure.

1 votes

Merci. J'ai oublié que je pouvais lui donner mon propre format. Voici celui qui fonctionne : '%d/%b/%Y:%H:%M:%S'.

1 votes

@SkaveRat Votre chaîne respecte-t-elle le fuseau horaire ? J'utilise %d/%b/%Y:%H:%M:%S %Z

4 votes

Pour une liste des abréviations de format disponibles gist.github.com/halloffame/5350249

55voto

Cort3z Points 1657

J'ai eu du succès avec :

require 'time'
t = Time.parse(some_string)

26voto

user1425976 Points 21

Cela convertira la chaîne de caractères en date en datetime, si l'on utilise la fonction Rails :

"05/05/2012".to_time

Référence du document : https://apidock.com/rails/String/to_time

24 votes

Il s'agit d'une méthode Ruby on Rails, pas d'une méthode Ruby.

2 votes

Bien que ce ne soit pas la réponse à cette question, cela m'a beaucoup aidé. Merci @user1425976

0 votes

Pourquoi les gens postent-ils des trucs sur Rails dans les questions sur Ruby ?

5voto

Wayne Conrad Points 31052

Dans Ruby 1.8, le module ParseDate convertit ce format et de nombreux autres formats de date et d'heure. Cependant, il ne traite pas de manière élégante les deux-points entre l'année et l'heure. En supposant que ce deux-points est une erreur de frappe et qu'il s'agit en fait d'un espace, alors.. :

#!/usr/bin/ruby1.8

require 'parsedate'

s = "30/Nov/2009 16:29:30 +0100"
p Time.mktime(*ParseDate.parsedate(s))    # =>  Mon Nov 30 16:29:30 -0700 2009

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X