Tengo que migrar un conjunto de datos muy grande de un sistema a otro. Una de las columnas de "origen" contiene una fecha, pero en realidad es una cadena sin restricciones, mientras que el sistema de destino ordena una fecha con el formato aaaa-mm-dd.Un analizador de fechas "inteligente" (indulgente)?
Muchas, pero no todas, las fechas de origen tienen el formato aaaammdd. Así que para obligar al formato esperado, lo hago (en Perl):
return "$1-$2-$3" if ($val =~ /(\d{4})[-\/]*(\d{2})[-\/]*(\d{2})/);
el problema surge cuando las fechas de origen se aleja de la aaaammdd "genérico". El objetivo es salvar tantas fechas como sea posible, antes de darse por vencido. Ejemplo cuerdas de origen incluyen:
21/3/1998, marzo de 2004, 2001, 03/04/97
puedo tratar de igualar ya que muchos de los ejemplos que puedo encontrar con una sucesión de regularidad expresiones como la de arriba.
¿Pero hay algo más inteligente que hacer? ¿No estoy reinventando la rueda? ¿Hay alguna biblioteca en algún lado haciendo algo similar? No pude encontrar nada relevante en Google "parser date analizador". (cualquier idioma está bien).
3/4/97 - ¿Es ese 4 de marzo o 3 de abril? –
Depende de su localidad. En Estados Unidos, eso es el 4 de marzo. Fuera de Estados Unidos, es probable que sea el 3 de abril. –
Me imagino que la mayoría de las herramientas de fecha tendrían una forma de establecer una opción predeterminada para manejar casos como el 3/4/97. A simple vista, al menos dos de los módulos Perl enumerados a continuación tienen esa opción. – Telemachus