Tengo esta situación en la que estoy leyendo sobre 130K registros que contienen fechas almacenadas como campos String. Algunos registros contienen espacios en blanco (nulos), algunos contienen cadenas como esta: 'dd-MMM-aa' y algunos contienen este 'dd/MM/aaaa'.Determinar si una cadena es una fecha válida antes de analizar
He escrito un método como este:
public Date parsedate(String date){
if(date !== null){
try{
1. create a SimpleDateFormat object using 'dd-MMM-yy' as the pattern
2. parse the date
3. return the parsed date
}catch(ParseException e){
try{
1. create a SimpleDateFormat object using 'dd/MM/yyy' as the pattern
2. parse the date
3. return parsed date
}catch(ParseException e){
return null
}
}
}else{
return null
}
}
lo que puede tener ya vimos el problema. Estoy usando try ... catch como parte de mi lógica. Sería mejor si puedo determinar de antemano que el String realmente contiene una fecha parseable en algún formato y luego intentar analizarlo.
Entonces, ¿hay alguna API o biblioteca que pueda ayudar con esto? No me importa escribir varias clases de Parse diferentes para manejar los diferentes formatos y luego crear una fábrica para seleccionar la correcta6, pero, ¿cómo puedo determinar cuál?
Gracias.
Si decide mantener su solución, por favor crean sólo 2 casos de SimpleDateFormat y los almacenan como constantes en su clase en lugar de ellos la creación de 130K veces. – van
Si las almacena como constantes, ¡asegúrese de que no se utilicen desde varios hilos a la vez! Me encontré con problemas con eso antes y contribuí con un detector de FindBugs, que encuentra AgeFormats y Calendarios estáticos. Están documentados como no seguros para subprocesos, pero eso es fácil de perder. Ver http://dschneller.blogspot.com/2007/04/calendar-dateformat-and-multi-threading.html, http://dschneller.blogspot.com/2007/04/findbugs-writing-custom-detectors- part.html y http://dschneller.blogspot.com/2007/05/findbugs-writing-custom-detectors-part.html –
@van: No hagas eso. SimpleDateFormat no es seguro para subprocesos, por lo que si utiliza la clase de más de un subproceso, las cosas explotarán en su cara. – Apocalisp