Comparar string com formato desejado[RESOLVIDO]

8 respostas
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!!!

8 Respostas

War_Paz
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();
	}
	
}

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

jks1903

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!!!

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.
}
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!!!

Fellipex

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

jks1903

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!!!

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.

vanessa.tenorio

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!!!

War_Paz

jks1903:
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!!!

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.

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…

doravan

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();
	}
Criado 8 de outubro de 2012
Ultima resposta 8 de out. de 2012
Respostas 8
Participantes 5