[RESOLVIDO] Tratamento de Data - Saber se um número é dia ou mês
8 respostas
B
biabsantana
Já estou exausta de tanto procurar sobre isso, por favor me ajudem :(
Eu estou fazendo um trabalho na linguagem java que é basicamente tratamento de data. Estou usando o SimpleDateFormat para converter e etc, mas o problema é o usuário pode digitar a data em qualquer formato ddmmyyyy yyyymmdd mmddyyyy, etc. Como eu faço pra saber em que formato ele digitou? Eu estou tentando usar o método split pra separar os blocos de números mas não sei como faço pra saber se é data, mês ou ano. Por que, por exemplo, 01 pode ser dia primeiro ou pode ser mês de janeiro. Eu estou fazendo esse tratamento em uma classe TratamentoData, que segue abaixo.
packagemodel.util;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassTratamentoData{publicstaticStringgetFormataDataBase(Stringentrada)throwsParseException{intdia;intmes;intano;Stringdatafinal;String[]dataentrada=entrada.split("/");intconjunto1=Integer.parseInt(dataentrada[1]);intconjunto2=Integer.parseInt(dataentrada[2]);intconjunto3=Integer.parseInt(dataentrada[3]);//12 PODE SER DIA 12 OU MES DE DEZEMBROSimpleDateFormatsdf=newSimpleDateFormat("dd/MM/yyyy");//nao funciona se o usuario digitar em outro formatojava.util.Datedata=sdf.parse(entrada);Calendarc=Calendar.getInstance();c.setTime(data);dia=(c.get(Calendar.DATE));mes=(c.get(Calendar.MONTH));ano=(c.get(Calendar.YEAR));datafinal=Integer.toString(dia+mes+ano);returndatafinal;}}
Bia, você e o teu usuário tem que entrar em acordo em que formato vão usar, não tem como programar o que você está pedindo e acertar 100% das vezes. E mais, caso não acertar, você vai acabar com um problema muito pior nas mãos.
Então, ou definam um formato específico, ou faça com que o usuário entre também com qual formato que ele está usando, como um segundo argumento para o teu método.
BTW, para transformar de Date para String, instancie um novo SimpleDateFormater com o formato da saída use o método format.
B
biabsantana
Bruno Laturner eu realmente concordo com você e muito obrigada pelas dicas. O meu professor me falou uma coisa que eu achei meio estranha, por que acaba sendo uma gambiarra. É o seguinte, considerar por default que a pessoa sempre vai digitar no formado ddmmyyyy e aí somente se for algo do tipo: 12/31/2012 ai eu encaixo como se o formato fosse mmddyyyy. Por isso a minha dúvida em saber se é um mês ou um dia.
Antes de fazer essas conversões eu valido o que o usuário digitou no formato que ele escolhe através de um radio, mas não daria pra eu pegar o formato daí por que cairia no mesmo problema. O usuário meio que pode digitar em qualquer formato. Vou fazer considerando que o usuário sempre digite no formato ddmmyyyy. Muuito obrigada ^^
1- Seu professor não entende nada de programação. Deveria pedir demissão se pediu uma coisa dessas… Pelo amor de Deus… que viagem
2- Forneça para ele o seguinte valor 03/01/2013 e pergunte para ele que data é… Se é 1 de março ou 3 de janeiro.
3- Para resolver o exercício e ganhar a nota, faça uma lista de SimpleDateFormat e tente fazer o parse da String. O primeiro SimpleDateFormat que conseguir formatar a data, é isso mesmo…
Pseudocódigo
DategetData(Stringvalor){List<SimpleDateFormat>lista=newArrayList<SimpleDateFormat>();lista.add(...);// adicione os simpleDateFormatsfor(SimpleDateFormatsdf:lista){try{returnsdf.format(valor);}catch(Exceptione){}}thrownewRuntimeException("Impossível formatar data");}
B
biabsantana
Eu já desistir de tentar entender ele a muito tempo ahsuahsuahsuahushauhsuahushah
Eu fiz assim:
Achei melhor do que tentar “adivinhar” se ele digitou dia ou mês primeiro. A única coisa que não está funcionando é o retorno de data inválida, mesmo se o usuário digitar 12/05/2014565555555 ele não apresenta a mensagem de erro.
rogelgarcia
No SimpleDateFormat tem um método chamado setLenient(boolean).
Acho que você tem que usar sdf.setLenient(false); (se não der certo, passe true… não sei agora de cabeça se é true ou false que tem que passar)
B
biabsantana
AAAA já sei por que a data inválida não tá funcionando, mesmo que ele digite 02/12/2012 a barrinha ainda vai tá em uma das duas posições aceitas pelo if, então nesse caso eu teria que fazer um tratamento pra ver a quantidade de caracteres, devendo ser sempre 10…
Hmm, acho que é isso, obrigada gente, muito obrigada mesmo. Eu já estava ficando maluca com tudo isso.
B
biabsantana
De qualquer forma vou dar uma olhada nesse método rogelgarcia, obrigada ^^