[Resolvido] Validação de Data

4 respostas
R

Fala pessoal,

Não sei se o JAVA possui alguma API específica para a funções que procuro, por isso estou perguntando.

Eu tenho um método que recebe uma String que representa uma data no formato: AAAAMMDDHHMM. Eu tenho que retornar a data no seguinte formato e em String: DD/MM/AAAA HH:MM

Eu até consigo, retornar, mas eu gostaria de fazer todas as validações possíveis para ver se a Data é válida ou não. Tipo, validações se o dia é 31 ou 30 dependendo do mês, se o ano é bissexto ou não. Esse tipo de validação.

O método que eu fiz até agora (está incompleto):

public static final String formataData(String Data) throws NullPointerException, NumberFormatException {
		
		if ((Data == null) || (Data.equals(""))) {
			throw new NullPointerException("A data passada é nula ou vazia");
		}
		
		StringBuffer novaData = new StringBuffer();
		int ano, mes, dia, horas, minutos;
		
		try {
			ano = Integer.parseInt(Data.substring(0, 4));
			mes = Integer.parseInt(Data.substring(4, 6));
			dia = Integer.parseInt(Data.substring(6, 8));
			horas = Integer.parseInt(Data.substring(8, 10));
			minutos = Integer.parseInt(Data.substring(10, 12));
		}
		catch (NumberFormatException e) {
			throw new NumberFormatException("O formato da data passada está incorreto");
		}
		
		novaData.append(Data.substring(6, 8));
		novaData.append("/");
		novaData.append(Data.substring(4, 6));
		novaData.append("/");
		novaData.append(Data.substring(0, 4));
		novaData.append(" ");
		novaData.append(Data.substring(8, 10));
		novaData.append(":");
		novaData.append(Data.substring(10, 12));
		
		return novaData.toString();
	}

Existe alguma API que faça essas validações de forma automática ou eu tenho que fazer na "unha"?

Valeu

4 Respostas

victor.godinho

uia...

tem sim...

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
Date suaData = df.parse("200808081230");
		
df = new SimpleDateFormat("dd/MM/yyyy HH:mm ");
System.out.println(df.format(suaData));

Falows filhote

R

Então, refiz o meu método de acordo com sua sugestão, mas estou tendo outro problema.

O método refeito ficou da seguinte maneira:

public static final String formataData(String strData) throws ParseException {
		
		if ((strData == null) || (strData.equals(""))) {
			throw new NullPointerException("A data passada é nula ou vazia");
		}
		
		String novaData = null;
		Date data = null;
		strData = strData.trim();
		SimpleDateFormat formatador = new SimpleDateFormat("yyyyMMddHHmm");
		
		try {
			data = formatador.parse(strData.trim());
		}
		catch (ParseException ex) {
			throw new ParseException("Data inválida", 0);
		}
		
		formatador = new SimpleDateFormat("dd/MM/yyyy HH:mm");
		novaData = formatador.format(data);
		
		return novaData;
	}

O problema:
Quando eu passo um parâmetro para ser formatado com o seguinte valor: “200801321200”. O método deveria lançar um ParseException (eu acho), já que não existe 32/01/2008 12:00. Porém, o método está devolvendo 01/02/2008 12:00.

O que será que pode estar ocorrendo?

valeu

O

Não é erro. O DateFormat calcula que o 32º de janeiro é na verdade 1º de fevereiro. Para forçar o parse correto adicione:

formatador.setLenient(false);
R

Muito bom!

Era isso mesmo, faltava o setLenient().
Agora ta funcionando de boa.

Valeu galera!

Criado 8 de agosto de 2008
Ultima resposta 11 de ago. de 2008
Respostas 4
Participantes 3