2009-12-15 16 views
40

Estoy usando java.text.SimpleDateFormat para analizar cadenas del formulario "yyyyMMdd".Hacer que SimpleDateFormat.parse() falle en fechas no válidas (por ejemplo, mes es mayor que 12)

Si trato de analizar una cadena con un mes mayor a 12, en lugar de fallar, pasa al año siguiente. Completo repro ejecutable:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class ParseDateTest { 

    public static void main(String[] args) throws ParseException { 

     SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); 
     Date result = format.parse("20091504"); // <- should not be a valid date! 
     System.out.println(result); // prints Thu Mar 04 00:00:00 CST 2010 
    } 
} 

yo preferiría tener un ParseException arrojados.

¿Hay alguna forma no hacky de obligar a que se produzca la excepción ?. Quiero decir, no quiero verificar manualmente si el mes es mayor a 12. Eso es algo ridículo.

Gracias por cualquier sugerencia.

NOTA: Ya sé sobre Joda Time, pero necesito hacerlo en un JDK simple sin bibliotecas externas.

Respuesta

96

Necesita hacerlo non-lenient. Por lo tanto,

format.setLenient(false); 

debería hacerlo.

+6

muchas gracias. Eso hizo el truco. Es increíble cómo hacer preguntas aquí da un resultado más rápido que buscar en google (o apestar en la búsqueda :). –

+2

+1 para el delineador. –

+2

stackoverflow debería permitir a los usuarios dar más de 1 punto a las respuestas y esta es una de esas respuestas. Estaba haciendo una coincidencia de patrones ridícula antes de analizar con 'SimpleDateFormat'. Muchas gracias. –

3

Puede utilizar la API Java 8 time. Si por ejemplo se utiliza un mes con un valor de 15:

String strDate = "20091504"; 
TemporalAccessor ta = DateTimeFormatter.ofPattern("yyyyMMdd").parse(strDate); 

Tendrá directamente una excepción

Exception in thread "main" java.time.format.DateTimeParseException: 
Text '20091504' could not be parsed: 
Invalid value for MonthOfYear (valid values 1 - 12): 15 
Cuestiones relacionadas