Passando uma String para Date no formato dd/mm/yyyy

Quando eu tento passar data errada, tipo “01/13/2010”, usando o “displayDateFormat.parse(stringDate)” ele transforma em uma Date com a data 01/01/2011, ou seja, esta acrescentando um mes, tinha que me devolver um erro pois é uma data errada (n existe mes 13). Alguém sabe me dizer pq?

Valeu!

    private oracle.jbo.domain.Date convertToDateOracle(String stringDate){
        
        if ("".equals(stringDate))
        return null;
        
        java.text.SimpleDateFormat displayDateFormat = new java.text.SimpleDateFormat ("dd/mm/yy");
        java.text.SimpleDateFormat systemDateFormat = new java.text.SimpleDateFormat ("yyyy-mm-dd");
        java.util.Date dateJavaTemp = null;
        Date dateOracleChanged = null;

        try {
            dateJavaTemp = displayDateFormat.parse(stringDate); //Aqui me transforma a data errada
            stringDate = systemDateFormat.format(dateJavaTemp);
            dateOracleChanged = new Date(stringDate);
            return dateOracleChanged;
            
        } catch (ParseException e) {
            Exception errorMessage = new Exception(e.getMessage());
            try {
                throw errorMessage;
            } catch (Exception f) {
                // TODO
            }
        }
    }

m == minuto.
M == mês.

para apontar o erro basta vc colocar o seguinte comando logo após declarar o formatador.

systemDateFormat.setLenient(false);

Com este comando é como se vc dissesse que não é para o computador “adivinhar” a data que você passou com erro. Como vc mesmo falou que colocou 01/13/2010 e ele colocou 01/01/2011 pois como o mes 13 não existe ele jogou a data para o mes seguinte que é 1/2011, e assim ele faria se vc colocasse 01/14/2011 = 01/02/2011…

mudei o mm para MM e continua a mesma coisa, é como se ele contasse os meses. Se eu coloco "“01/22/2010”, ele me devolve “01/10/2011”. Eu gostaria que ele me desse erro e nao somasse os meses. Pra mim é um absurdo q essa classe considera o numero 22 como um mes valido.

Eu n tinha visto a resposta acima… Vou testar.

Caro amigo devaney, use o setLenient como expliquei à cima.

[quote=Alessandro09]para apontar o erro basta vc colocar o seguinte comando logo após declarar o formatador.

systemDateFormat.setLenient(false);

Com este comando é como se vc dissesse que não é para o computador “adivinhar” a data que você passou com erro. Como vc mesmo falou que colocou 01/13/2010 e ele colocou 01/01/2011 pois como o mes 13 não existe ele jogou a data para o mes seguinte que é 1/2011, e assim ele faria se vc colocasse 01/14/2011 = 01/02/2011…[/quote]

Grande! Valeu!