Necesito analizar la siguiente cadena en un objeto DateTime:
30/Nov/2009:16:29:30 +0100
¿Hay una forma fácil de hacer esto?
PD: Quiero convertir la cadena de arriba como está. Los dos puntos después del año no son un error tipográfico. También quiero resolver el problema con Ruby y no con RoR.
%d/%b/%Y:%H:%M:%S %Z
%Y
lo que coincidirá con ambos2015
(como se esperaba) y2016-foo-bar
ya que se detiene cuando ve2016
. Este comportamiento es consistente con la contraparte de C; sin embargo, la función C devuelve la posición del final de la coincidencia (por ejemplo, la primera-
en el caso "2016") para que decidamos si la coincidencia es exacta; en Ruby devuelve unDateTime
, por lo que no podemos decir si todavía hay algo después.¿No debería funcionar esto también?
fuente
require 'active_support/all'
y luego"30/Nov/2009 16:29:30 +0100".to_datetime
(en realidad no necesita todas las extensiones active_support, pero buena suerte para averiguar cuáles requerir de forma selectiva)to_datetime
agregarse a losString
objetos:require 'active_support/core_ext/string/conversions'
He tenido éxito con:
fuente
solía
Time.parse("02/07/1988")
, como algunos de los otros carteles.Un problema interesante fue que
Time
se cargó de forma predeterminada cuando abrí IRB, peroTime.parse
no estaba definido. Tuve querequire 'time'
que hacerlo funcionar.Eso es con Ruby 2.2.
fuente
Esto convertirá la cadena en fecha a fecha y hora:
fuente
Para los desarrolladores de Rails chinos:
fuente
en Ruby 1.8, el módulo ParseDate convertirá este y muchos otros formatos de fecha / hora. Sin embargo, no trata con gracia los dos puntos entre el año y la hora. Suponiendo que los dos puntos son un error tipográfico y en realidad son un espacio, entonces:
fuente
También puede analizar una cadena de fecha y hora con una zona horaria determinada:
fuente