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