Comparar string com formato desejado[RESOLVIDO]

Bom dia, pessoal!!!

Então, preciso pegar uma string no qual o usuário digitou em um jTextField e comparar se esta string segue o formato “dd/MM/yyyy”, se sim, eu retorno false, se não, retorno true, ou seja, preciso comparar se a string que o usuário entrou, segue o formato de data desejado. Porém estou com dúvidas em como fazer esta comparação.

Podem me dar sugestões?!

 private boolean verificarDataPreenchida() {

        boolean retorno = false;

        String data = jTextFieldData.getText();

        String t = (new SimpleDateFormat("dd/MM/yyyy").format(data)); //ERRADO

        //isEmpty(): Função que  verifica se uma variável está vazia (incluindo espaços em branco).
        //retorna: VERDADEIRO se está vazio; FALSO caso contrário. 

        if (data.isEmpty() == true) { 

            if (data.compareTo(t) == 0) { //ex: Se usuário digitou: 08/10/2012, então esta correto, caso contrário, errado
                retorno = false;
            }
            else
              retorno = true;  

        } else {
            retorno = true;
        }
        return retorno;
    }

Grata!!!

[code]package paz;

public class Inicio{

String a = "07/04/1995";
String teste = "LOL";
String teste2 = "Oi/Tio/Vish";
int anoMinimo = 1900;
int anoMaximo = 2050;
public Inicio(){
	try{
		if(comparaTio(a) == true){
			System.out.println("É, parece que essa data é válida e.e");
		}else{
			System.out.println("A data tá fora dos limites, amigo");
		}
	}catch(Exception e){
		System.out.println("A data sequer segue o formato correto D:");
		e.printStackTrace();
	}
}

public boolean comparaTio(String v) throws Exception{
	String f[] = v.split("/");
	boolean retorno = false;
	if(Integer.parseInt(f[0]) <= 31 && Integer.parseInt(f[0]) >= 1 && Integer.parseInt(f[1]) <= 12 && Integer.parseInt(f[1]) >= 1 && Integer.parseInt(f[2]) >= anoMinimo && Integer.parseInt(f[2]) <= anoMaximo){
		retorno = true;
	}
	return retorno;
}

public static void main(String e[]){
	new Inicio();
}

}[/code]

Eu sei que código dos outros é auto-criptografado, mas qualquer dúvida só dizer :slight_smile:

[quote=vanessa.tenorio]Bom dia, pessoal!!!

Então, preciso pegar uma string no qual o usuário digitou em um jTextField e comparar se esta string segue o formato “dd/MM/yyyy”, se sim, eu retorno false, se não, retorno true, ou seja, preciso comparar se a string que o usuário entrou, segue o formato de data desejado. Porém estou com dúvidas em como fazer esta comparação.

Podem me dar sugestões?!

 private boolean verificarDataPreenchida() {

        boolean retorno = false;

        String data = jTextFieldData.getText();

        String t = (new SimpleDateFormat("dd/MM/yyyy").format(data)); //ERRADO

        //isEmpty(): Função que  verifica se uma variável está vazia (incluindo espaços em branco).
        //retorna: VERDADEIRO se está vazio; FALSO caso contrário. 

        if (data.isEmpty() == true) { 

            if (data.compareTo(t) == 0) { //ex: Se usuário digitou: 08/10/2012, então esta correto, caso contrário, errado
                retorno = false;
            }
            else
              retorno = true;  

        } else {
            retorno = true;
        }
        return retorno;
    }

Grata!!! [/quote]

Uma idéia mais simples de repente poderia ser através de um bloco try catch.

Por exemplo:

//...codigo anterior
String data = jTextFieldData.getText();
try{
      String t = (new SimpleDateFormat("dd/MM/yyyy").format(data));
      //código a ser executado se o formato for válido.
} catch(IllegalFormatException ife){
    //código a ser executado se o formato for inválido.
}

Pessoal!!! Muito obrigada pela ajuda!!!
O código do War Paz atendeu perfeitamente as minhas necessidades. O código do jks1903 , está perfeito, porém está muito avançado para neu nível de conhecimento :oops: .
Muito obrigada!!!

na verdade o código do jks é bem mais simples

[quote=vanessa.tenorio]Pessoal!!! Muito obrigada pela ajuda!!!
O código do War Paz atendeu perfeitamente as minhas necessidades. O código do jks1903 , está perfeito, porém está muito avançado para neu nível de conhecimento :oops: .
Muito obrigada!!![/quote]

Blza, qualquer coisa tamo ai.
Mas referente ao código do amigo ali em cima, apenas atente que ele valida datas como : 31/09/2012, 30/02/2012, 00/01/2012, dentre outros.

jks1903 , muito obrigada pelo toque e excelente observação.

Analisei seu questionamento e verifiquei que este problema não ocorrerá no meu caso, pois estou comparando dados, no caso datas, que estão sendo selecionadas do banco de dados, e quando eu insiro tais datas no banco, estas são as atuais (Veja a estrutura que utilizei para selecionar as datas atuais - fiz termo a termo, pois tenho que realizar outras análises), então não terei problema com datas inválidas. No caso do usuário inserir uma data invalida ou incorreta, esta não será compatível com a do banco de dados na comparação que fiz com a ajuda de vocês, assim apresentará uma mensagem de erro.

GregorianCalendar cal = new GregorianCalendar(); // manipulação de datas semana = cal.get(Calendar.WEEK_OF_YEAR); ano = cal.get(Calendar.YEAR); mes = cal.get(Calendar.MONTH);
Forte abraço e novamente muito obrigada!!!

[quote=jks1903][quote=vanessa.tenorio]Pessoal!!! Muito obrigada pela ajuda!!!
O código do War Paz atendeu perfeitamente as minhas necessidades. O código do jks1903 , está perfeito, porém está muito avançado para neu nível de conhecimento :oops: .
Muito obrigada!!![/quote]

Blza, qualquer coisa tamo ai.
Mas referente ao código do amigo ali em cima, apenas atente que ele valida datas como : 31/09/2012, 30/02/2012, 00/01/2012, dentre outros.[/quote]

Na verdade, valida datas desde a do ano definida por anoMinimo (int) e anoMaximo (int)

Ah, não validaria a data 00/01/2012, por que 00 não é um dia válido. Pra falar a verdade, alguns dias são inválidos em certo meses, mas aí geraria um código bem maior fazer os limites de cada mês…

Vá de regular expression, a forma mais prática de validar uma data.
Ele valida meses, dias de cada mês, anos, anos bissextos…
Datas como 29/02/2013 são inválidas.

Este regex aceita qualquer data válida.
Caso você deseje limitar as datas válidas, após passar neste regex você pode converter a string em data e validar os limites com datas fortemente tipadas.

	public static boolean ValidaData(String data){
		java.util.regex.Pattern p = java.util.regex.Pattern.compile(RegexData());
		java.util.regex.Matcher m = p.matcher(data);
		return m.matches();
	}
	
	public static String RegexData(){
		StringBuffer sb = new StringBuffer();
		sb.append("(((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\\d{4}))|(([0][1-9]|[12][0-9]|30)");
		sb.append("([-./])(0[469]|11)([-./])(\\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])");
		sb.append("(\\d{4}))|((29)(\\.|-|\\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])");
		sb.append("([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)");
		sb.append("([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])))");
		return sb.toString();
	}