Problema ao inserir campo data

8 respostas
Deivid_Ribeiro
pessoal é o seguinte, fiz um JFormattedTextField para receber uma data, e um try para verificar o campo JFormattedTextField. se o usuario digita uma data valida o sistema cadastra. porém se ele digita algo como 40/25/8572 o faz o botão perder a ação. de cadastrar. se o try da erro ele mostra a mensagem de que a data é invalida. esse é meu codigo
// fiz esse metodo para receber a data

private JFormattedTextField getNascimentoField() {
		setLayout(null);
		if (nascimentoField == null) {
			try {
				nascimentoField = new JFormattedTextField(new MaskFormatter(
						"##/##/####"));
			} catch (ParseException e) {
				e.printStackTrace();
			}
			nascimentoField.setBounds(30, 140, 80, 20);
			getContentPane().add(nascimentoField);
		}
		return nascimentoField;
	}


// no action do botao fiz isso

public void actionPerformed(ActionEvent salvar) {
					SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");

					

// aqui ele verifica o campo digitado se não esta vazio. se o cara digita algo ele consegui fazer o try só que com uma data muito bagunçada. e trava o botão.
					try {
						Date dataNasc = data.parse(getNascimentoField()
								.getText());
						animal.setDateNascimento(dataNasc);

					} catch (ParseException e) {
						JOptionPane.showMessageDialog(null,
								"Data de Nascimento é invalida!");

						e.printStackTrace();
					}

como faço um try que verifica que a data é valida? e não uma 78/15/1958
?

8 Respostas

Danilo_Carvalho

Deivid_Ribeiro bom dia!

Com o split voce pode obter os valores e testar separadamente dia mês e ano.

Existem outras formas, essa é uma forma rápida de solucionar seu problema.

Qualquer coisa posta ai.

Até mais.

N

Fuçando um poco aqui, achei isso:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
        sdf.setLenient(false);  
        Date aData = sdf.parse(data);

Vê se resolve.
Read more: http://javafree.uol.com.br/topic-874879-Erro-com-calendarsetLenient.html#ixzz2650jRxkM

Deivid_Ribeiro

Eu estou tentando usar o split da seguinte forma

String dia = getNascimentoField().getText().toString(); String[] dianum = dia.split("\\/"); System.out.println(dianum[0]);
porém encontrei a barreira de não conseguir converter a dianum[0] em inteiro para verificar o tamanho do numero.

Danilo_Carvalho

O NickStyle mostrou uma dica acima que eu não sabia, mas acabei de fazer uns testes aqui, recomendo.

Deivid_Ribeiro

Realmente NickStyle isso resolveu boa parte do meu problema o que ele fez agora foi o seguinte,
ele aceita a data 40/09/2010 e converte ela para 10/10/2010 faz os dias que passaram incluir no mes.
só que não impede de cadastrar uma data.
queria que se ele digita-se isso impedisse ele de cadastrar.

Danilo_Carvalho

Da uma olhada se esse trecho de codigo te ajuda

public class DateValidate {

	public static void main(String[] args) {
		
		String stringDate = "40/25/8572";
		
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
		
		String splitDate[] = stringDate.split("/");
		
		for (int i = 0; i < 3; i++) {
			System.out.println(splitDate[i]);
		}
		
	}
	
}
Deivid_Ribeiro

NickStyle valeu cara através da sua logica consegui a solução para o codigo que ficou assim:

try {
							data.setLenient(false);
							Date dataNasc = data.parse(getNascimentoField()
									.getText());
							
							animal.setDateNascimento(dataNasc);
							AcaoSalvar(salvar);
												
							

						} catch (ParseException e) {
							JOptionPane.showMessageDialog(null,
									"Data de Nascimento é invalida!");

							e.printStackTrace();
						}
Y
Deivid_Ribeiro:
NickStyle valeu cara através da sua logica consegui a solução para o codigo que ficou assim:
try {
							data.setLenient(false);
							Date dataNasc = data.parse(getNascimentoField()
									.getText());
							
							animal.setDateNascimento(dataNasc);
							AcaoSalvar(salvar);
												
							

						} catch (ParseException e) {
							JOptionPane.showMessageDialog(null,
									"Data de Nascimento é invalida!");

							e.printStackTrace();
						}

cara desculpa minha ignorancia mas ja aproventando o topico... isso ai valida a data?
Se valida , quando a data é nula o que acontece da erro no gravar somente?

Criado 10 de setembro de 2012
Ultima resposta 12 de set. de 2012
Respostas 8
Participantes 4