2012-05-15 11 views
6

Necesito analizar una fecha de la cadena de entrada usando el patrón de fecha "aaaa-MM-dd", y si la fecha vendrá en cualquier otro formato, arroje un error.Analizador de fecha incorrecto con SimpleDateFormat, Java

Esta es mi pieza de código en el que analizar la fecha:

private void validateDate() throws MyException { 
    Date parsedDate; 
    String DATE_FORMAT = "yyyy-MM-dd"; 
    try{ 
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate()); 
    System.out.println(parsedDate); 
    } catch (ParseException e) { 
    throw new MyException(“Error occurred while processing date:” + getMyDate()); 
    } 

} 

Cuando tengo cadena como "2011-06-12" como entrada en myDate voy a obtener una salida "Jue Sep 29 de 00:00 : 00 EEST 2011 ", que es bueno.

Cuando envié una cadena incorrecta como "2011-0612", recibo un error como se esperaba.

Los problemas comienzan cuando intento pasar una cadena que todavía tiene dos "guiones", pero la cantidad de dígitos es incorrecta. Ejemplo:

cadena de entrada "2011-06-1211" resultado "Tue Sep 23 00:00:00 EEST 2014".

cadena de entrada "2011-1106-12" resultado "lun feb 12 00:00:00 EET 2103".

No puedo cambiar el formato de entrada de la fecha de la cadena.

¿Cómo puedo evitarlo?

+1

No estoy seguro de cómo "2011-06-12" como entrada en myDate obtendré la salida "Thu Sep 29 00:00:00 EEST 2011" es bueno. Debería recibir el 12 de junio como resultado, no el 29 de septiembre ... –

Respuesta

9

¿Ha intentado llamar al setLenient(false) en su SimpleDateFormat?

import java.util.*; 
import java.text.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     format.setLenient(false); 
     Date date = format.parse("2011-06-1211"); // Throws... 
     System.out.println(date); 
    } 
} 

Tenga en cuenta que también me gustaría sugerir el establecimiento de la zona horaria y la configuración regional de la SimpleDateFormat. (Como alternativa, use Joda Time en su lugar ...)

+0

Gracias por su respuesta. Ejecutaré las pruebas y te daré los comentarios. Pero en este momento parece que el problema está resuelto. – AndrewVP

+0

En simpleDateFormat, siempre devuelve el mes incorrecto. ¿Cuál es la razón de esto? –

+0

@AnandSavjani: No, no es así. No puedo decir lo que estás haciendo mal con tan poca información, pero 'SimpleDateFormat' funciona bastante razonablemente. Si cree que no funciona, le sugiero que haga una nueva pregunta con un programa breve pero completo que demuestre el problema. –

Cuestiones relacionadas