J'ai besoin d'analyser la chaîne suivante dans un objet DateTime:
30/Nov/2009:16:29:30 +0100
Y a-t-il un moyen facile de faire ceci?
PS: Je veux convertir la chaîne ci-dessus telle quelle. Le colon après l'année n'est pas une faute de frappe. Je veux aussi résoudre le problème avec Ruby et non RoR.
%d/%b/%Y:%H:%M:%S %Z
%Y
correspondra aux deux2015
(comme prévu) et2016-foo-bar
puisqu'il s'arrête quand il voit2016
. Ce comportement est cohérent avec l'homologue C; cependant, la fonction C renvoie la position de la fin de la correspondance (par exemple la première-
dans le cas «2016») pour nous permettre de décider si la correspondance est exacte; dans Ruby, il renvoie aDateTime
, donc nous ne pouvons pas dire s'il y a encore quelque chose après.Cela ne devrait-il pas fonctionner également?
la source
require 'active_support/all'
et ensuite"30/Nov/2009 16:29:30 +0100".to_datetime
(vous n'avez pas réellement besoin de toutes les extensions active_support, mais bonne chance pour déterminer lesquelles exiger de manière sélective)to_datetime
ajouté auxString
objets:require 'active_support/core_ext/string/conversions'
J'ai eu du succès avec:
la source
J'ai utilisé
Time.parse("02/07/1988")
, comme certaines des autres affiches.Un piège intéressant était qu'il
Time
était chargé par défaut lorsque j'ai ouvert IRB, maisTime.parse
n'était pas défini. J'ai dû lerequire 'time'
faire fonctionner.C'est avec Ruby 2.2.
la source
Cela convertira la chaîne de date en datetime:
la source
Pour les développeurs chinois de Rails:
la source
dans Ruby 1.8, le module ParseDate convertira ce format et de nombreux autres formats de date / heure. Cependant, il ne traite pas gracieusement le côlon entre l'année et l'heure. En supposant que deux-points est une faute de frappe et est en fait un espace, alors:
la source
Vous pouvez également analyser une chaîne de date / heure avec un fuseau horaire donné:
la source