Pessoal recebo de um jTextField um campo String com o seguinte formato:dd/mm/aaaa, o meu problema agora é validar no Java se o cara digitou o dia e mes dentro dos limites (se possível levando em conta se o ano é bixesto).
Isso é possível?
Pessoal recebo de um jTextField um campo String com o seguinte formato:dd/mm/aaaa, o meu problema agora é validar no Java se o cara digitou o dia e mes dentro dos limites (se possível levando em conta se o ano é bixesto).
Isso é possível?
Dê uma olhada nas classes DateFormat, SimpleDateFormat.
Então se você estiver trabalhando com Strings você pode usar
public class TesteDeSplit {
public static void main(String[] args) {
String[] data = "13/07/2006".split("/");
for(int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
}
SimpleDateFormat seuPadrao = new SimpleDateFormat("dd/MM/yyyy");
Date data = seuPadrao.parse("13/03/1983");
Pessoal eu tentei implementar os exemplos de vcs mas nenhum retornou o que eu preciso. Na verdade eu preciso que se o usuário digitar “11/20/2006” por exemplo eu tenha como pegar via exception por exemplo que a data está incorreta para poder avisar o usuário.
pense em expressões regulares
ou tente fazer um new Date dentro de um try catch
Date data = null;
String dataTexto = new String("10/30/2006");
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
try {
format.setLenient(false);
data = format.parse(dataTexto);
} catch (ParseException e) {
JOptionPane.showMessageDialog(null,"O Mané escreveu a data Errada","AVISO",JOptionPane.WARNING_MESSAGE);
}
faz isso ae !
até se o dia nao estiver no mês, ele vai gritar !!!
não muda a mensagem no teu programa ta, hehe !
Bom há classes que fazem isso para você, mas não sei se você viu, mas você pode criar sua própria Exception por exemplo se o mês(índice 1 do meu exemplo) é inválido.
if (data[1] <1 | data[1] > 12){
throw new IllegalArgumentException
}
Se você gostou da minha idéia continue postando nesse tópico que a gente vê junto essas classes!
Mas compensa mais usar uma classe pronta para isso!!!
Mas segue mais uma maneira!!
Tente assim:
[code] String text=“32/12/1983”;
String DatePattern = "^(?:(31)(\D)(0?[13578]|1[02])\2|(29|30)(\D)(0?[13-9]|1[0-2])\5|(0?[1-9]|1\d|2[0-8])(\D)(0?[1-9]|1[0-2])\8)((?:1[6-9]|[2-9]\d)?\d{2})$|^(29)(\D)(0?2)\12((?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$";
if ( text.matches(DatePattern) ) {
System.out.println("valid date");
}else{
System.out.println("not a valid date");
}[/code]
[quote=Roger75]Tente assim:
[code] String text=“32/12/1983”;
String DatePattern = "^(?:(31)(\D)(0?[13578]|1[02])\2|(29|30)(\D)(0?[13-9]|1[0-2])\5|(0?[1-9]|1\d|2[0-8])(\D)(0?[1-9]|1[0-2])\8)((?:1[6-9]|[2-9]\d)?\d{2})$|^(29)(\D)(0?2)\12((?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$";
if ( text.matches(DatePattern) ) {
System.out.println("valid date");
}else{
System.out.println("not a valid date");
}[/code][/quote]
tirem as crianças da sala, ou melhor crianças não facam isso !!!
vou colocar o codigo bonitinho e funcional denovo:
Date data = null;
String dataTexto = new String("10/30/2006");
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
try {
format.setLenient(false);
data = format.parse(dataTexto);
} catch (ParseException e) {
JOptionPane.showMessageDialog(null,"O Mané escreveu a data Errada","AVISO",JOptionPane.WARNING_MESSAGE);
}
o setLenient(boolean) vai resolver o seu problema, ele como false nao vai deixar que uma data do tipo: 30/13/2006 se torne um 30/01/2007.
Pessoal valeu mesmo.
A solução que eu implementei foi essa:
Date data = null;
String dataTexto = new String(jTextFieldDataVencimento.getText());
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
try {
format.setLenient(false);
data = format.parse(dataTexto);
} catch (ParseException e) {
JOptionPane.showMessageDialog(null,
"Data inválida. Tente novamente!",
"AVISO",
JOptionPane.WARNING_MESSAGE);
}
hehe!
com a mensagem do Mané ele nunca mais iria fazer isso denovo!
qualquer coisa estamos ae!
Deixei a mensagem original e fiz um teste pro pessoal aqui.
Todo mundo aprovou esse novo padrão de mensagens de erro, mas por hora não podemos implementar. :lol:
galera , fiz dessa forma mas a data 03/3/96 por exemplo ele aceita
E não era pra aceitar???
[quote]
[code]
String text=“32/12/1983”;
String DatePattern = "^(?:(31)(\D)(0?[13578]|1[02])\2|(29|30)(\D)(0?[13-9]|1[0-2])\5|(0?[1-9]|1\d|2[0-8])(\D)(0?[1-9]|1[0-2])\8)((?:1[6-9]|[2-9]\d)?\d{2})$|^(29)(\D)(0?2)\12((?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$";
if ( text.matches(DatePattern) ) {
System.out.println("valid date");
}else{
System.out.println("not a valid date");
}
[/code][/quote]
PQP !!! O que que é isso??? Pelamordedeus…
E não era pra aceitar???
[quote]
[code]
String text=“32/12/1983”;
String DatePattern = "^(?:(31)(\D)(0?[13578]|1[02])\2|(29|30)(\D)(0?[13-9]|1[0-2])\5|(0?[1-9]|1\d|2[0-8])(\D)(0?[1-9]|1[0-2])\8)((?:1[6-9]|[2-9]\d)?\d{2})$|^(29)(\D)(0?2)\12((?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$";
if ( text.matches(DatePattern) ) {
System.out.println("valid date");
}else{
System.out.println("not a valid date");
}
[/code][/quote]
PQP !!! O que que é isso??? Pelamordedeus…[/quote]
Então, eu queria que não aceitasse, só aceitasse 03/03/1996 e não 03/3/96, será que tem como??
Bom, daí acho que você terá que usar expressões regulares mesmo. “Parecido” com aquela mega-expressão-montruosa-assombrosa-macabra da primeira página… Porque 4/4/2008 não deixa de ser uma data válida…