[Resolvido] Validação de Data

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):

[code]
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();
}[/code]

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

Valeu

uia…

tem sim…

[code]
SimpleDateFormat df = new SimpleDateFormat(“yyyyMMddHHmm”);
Date suaData = df.parse(“200808081230”);

df = new SimpleDateFormat("dd/MM/yyyy HH:mm ");
System.out.println(df.format(suaData));[/code]

Falows filhote

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

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);

Muito bom!

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

Valeu galera!