2012-01-18 10 views
6

Me gustaría comprobar el formato iso8601 para la fecha ingresada en ruby, como start_date = "2011/05/05" debe coincidir para el formato 2011-05-05T00: 00: 00-04: 00 y se devuelven los errores en consecuencia. ¿Deberíamos usar regex aquí o hay algún método para esto?Cómo hacer coincidir el formato de zona horaria YYYY-MM-DDThh: mm: ssTZD en ruby ​​

+0

aclaraciones ... Si proporciono texto = "2011-02-30T00: 00: 00" analizado = Time.iso8601 (texto) da => miércoles mar 02 00:00:00 +0000 2011, ajustando la fecha, ¿Podemos evitar esto y arrojar errores? ¿Voy por la validación personalizada o está disponible. También Time.iso8601 (texto) bloquea la aplicación cuando se proporciona una fecha no válida, podemos simplemente devolver booleano después de hacer coincidir ... – Bijendra

Respuesta

8

suena como usted quiere Time.iso8601:

require 'time' 
iso = Time.iso8601(start_date) 

Ver this blog post para más información.

EDIT: He aquí un pequeño programa de prueba, pero completo que trabaja:

require 'time' 
text = "2011-05-05T00:00:00-04:00" 
parsed = Time.iso8601(text) 
puts parsed 

Salida:

Thu May 05 04:00:00 UTC 2011 
+0

'Time.iso8601 'no toma una cadena como argumento (debe ser un objeto de fecha u hora). – steenslag

+0

@steenslag: Sí lo hace ... edición para incluir el programa de prueba. –

+0

Tienes razón ... – steenslag

3

Para la validación de expresiones regulares (con microsegundos opcionales y zona horaria) usan:

^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$ 

Prueba en: http://rubular.com/r/qFFrhzvdsS

No se recomienda en las secuencias de comandos cuando el rendimiento importa!

Cuestiones relacionadas