Me ajudem, problema com Datas!

12 respostas
FabioMelo

Oi galera do GUJ, esse é meu primeiro post nesse fórum, que para mim é um dos melhores sobre java na lingua portuguesa. Depois da babação toda vamos ao que interessa :slight_smile: :
Eu estou transformando uma string contendo uma data no formato “dd/MM/yyyy” em uma data real (Date), porem nao achei nenhuma maneira de tratar os erros caso alguem passe para a string uma data inválida tipo 30/02/2005 por exemplo. Abaixo segue o codigo que estou usando:

SimpleDateFormat dateFormat = new SimpleDateFormat(“dd/MM/yyyy”);
Date date;

try{

date = dateFormat.parse( jFTFData.getText() );

}

catch( ParseException e ){

e.printStackTrace();

}

Gotaria que alguem me desse uma luz de como fazer isso, qualquer ajuda será bem vinda.

12 Respostas

brlima

Bem, acho que nao tem nada do tipo "Erro na data - dia invalido!, ou algo parecido. Se quiser saber o que tá errado, vai ter que validar na mao :smiley: Mas se procurar aqui no forum, tem alungs codigos pra isso já.

Lembrando que se a data estiver errada, é lançado uma excessão, hein!

flw!

danieldestro

Uma data inválida gera um exceção.
Creio que seja do tipo ParseException. É só tratar a mensagem e boa.

brlima

danieldestro:
Uma data inválida gera um exceção.
Creio que seja do tipo ParseException. É só tratar a mensagem e boa.

acho que ele quer algo pra validar se a data tá certinho…
tem esse topico aqui, com um exemplo de um textfield que valida. ve se te ajuda.

Flw!

FabioMelo

Por incrivel que pareça nao gerou nenhuma exceção, e é por que testei datas absurdas como 99/99/9999, entao eu resolvi imprimir o que estava sendo gerado e percebi que na realidade o compilador parece criar (ou faz um cast ) uma data valida, porem nenhuma mensagem de exceção foi gerada.

danieldestro

Hummm… é verdade…
Se você colocar 32/12/2004, ele traduz para 01/01/2005.
Pode fazer o teste aí.

FabioMelo

brlima, acho que é isso mesmo que voce indicou, vou ver se consigo entender e compilar esse código.
Valeu pela dica :smiley:

FabioMelo

Acontece exatamente isso Daniel.

brlima

danieldestro:
Hummm… é verdade…
Se você colocar 32/12/2004, ele traduz para 01/01/2005.
Pode fazer o teste aí.

q coisa bizarra!? :shock: :shock:
nunca parei pra perceber isso… Mas te juro que isso nao acontecia ( eu acho )… Eu to usando o java 5. alguem usa um mais antigo ai e ta dando o mesmo problema???

T

Cheque o método setLenient, você deve chamar com o parâmetro (false).

FabioMelo

Esse método é de que classe?

T

java.text.DateFormat

Como java.text.SimpleDateFormat é um java.text.DateFormat, então dá para usar setLenient com SimpleDateFormat.

setLenient

public void setLenient(boolean lenient)

    Specify whether or not date/time parsing is to be lenient. 
    With lenient parsing, the parser may use heuristics to interpret inputs 
    that do not precisely match this object's format. 
    With strict parsing, inputs must match this object's format.

    Parameters:
        lenient - when true, parsing is lenient
    See Also:
        Calendar.setLenient(boolean)
FabioMelo

Valew thingol !!!

Criado 14 de janeiro de 2005
Ultima resposta 17 de jan. de 2005
Respostas 12
Participantes 4