Date Format em um campo TextView [RESOLVIDO]

Olá, boa tarde.

Estou com enorme dificuldades em implantar um Date Format em um TextView do Android.
A ideia é que o usuário NÃO consiga inserir uma data inválida, por exemplo 33/10/2012.

Eu consegui fazer criar uma máscata do TextView para quando ele digitar, ele já cria as “/” automaticamente. Porém, gostaria de forçá-lo a digitar uma data válida, se ele não digitar exibirei uma mensagem avisando que a data está inválida.

Alguém poderia me ajudar a solucionar este problema, por gentileza?

Segue abaixo código onde crio a máscara de data para este TextView. Teria que fazer o Date Format aqui dentro ou algo externo? Como implementaria?

[code]//Máscara data admissão
textAdmissao.addTextChangedListener(new TextWatcher() {
boolean isUpdating;

		@Override
		public void onTextChanged(CharSequence s, int start, int before, int after) {
			if (isUpdating) {
				isUpdating = false;
				return;
			}
			
			
			boolean hasMask = s.toString().indexOf('/') > -1;
			String str = s.toString().replaceAll("[/]", "");
			if (after > before) {
				if (str.length() > 1) {
					textAdmissao.requestFocus();
					str = str.substring(0, 2) + '/' + str.substring(2);
				}
				if (str.length() > 5) {
					str = str.substring(0, 5) + '/' + str.substring(5);
				}
				isUpdating = true;
				textAdmissao.setText(str);
				textAdmissao.setSelection(textAdmissao.getText().length());
			} else {
				isUpdating = true;
				textAdmissao.setText(str);
				textAdmissao.setSelection(Math .max(0, Math .min(hasMask ? start - before : start, str.length())));
			}
		}
		
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count, int after) {
			
		}
		
		@Override
		public void afterTextChanged(Editable s) {
			
		}
	});[/code]

Alguém poderia me ajudar, por gentileza?

Gostaria de validar data em um campo TextView.

Oi,

A sua dúvida está em “como fazer a validação” ou “onde colocar o código para fazer a validação” ?

Tchauzin!

[quote=lina]Oi,

A sua dúvida está em “como fazer a validação” ou “onde colocar o código para fazer a validação” ?

Tchauzin!

[/quote]

Olá!

Obrigado por responder e desculpe a demora, está realmente corrida a vida.

Eu estava com dúvida em como fazer a validação de data, no qual eu já consegui solucionar. Se foi feito da melhor forma, sinceramente não sei…rsrs!
Caso alguém queira o código basta postar aqui ou enviar mensagem privada que estou à disposição.

Mais uma vez agradeço.

Abraço,
Marco Ostan

Oi,

Sim. Seria muito interessante postar a sua solução aqui. Quem tiver a mesma dúvida poderá mata-la lendo o seu tópico!

Tchauzin!

Oi,

Não esquece de seguir as instruções:

  • Pressione o botão de seu primeiro post
  • Acrescente no final do título a tag [RESOLVIDO]

Tchauzin!

[quote=lina]Oi,

Sim. Seria muito interessante postar a sua solução aqui. Quem tiver a mesma dúvida poderá mata-la lendo o seu tópico!

Tchauzin![/quote]

Olá,

Segue primeiro o código da classe que criei para validação da data:

import java.util.GregorianCalendar;
import java.util.StringTokenizer;

public class Validador {
	public boolean validarData(String data) {
		String dia;
        String mes;
        String ano;
        
        StringTokenizer token = new StringTokenizer(data, "/");
        try {
        	dia = token.nextToken();
            mes = token.nextToken();
            ano = token.nextToken();

            if (dia.length() < 2 || dia.length() > 2)
                return false;
            if (mes.length() < 2 || mes.length() > 2)
                return false;
            if (ano.length() < 4 || dia.length() > 4)
                return false;

            int intDia = Integer.parseInt(dia);
            int intMes = Integer.parseInt(mes);
            int intAno = Integer.parseInt(ano);

            if (intMes < 1 || intMes > 12)
                return false;

            if (intMes == 1 || intMes == 3 || intMes == 5 || intMes == 7
                    || intMes == 8 || intMes == 12) {
                if (intDia < 1 || intDia > 31)
                    return false;
            } else if (intMes == 4 || intMes == 6 || intMes == 9
                    || intMes == 10 || intMes == 11) {
                if (intDia < 1 || intDia > 30)
                    return false;
            } else if (!new GregorianCalendar().isLeapYear(intAno)) {
                    return false;
            }
        } catch (Exception e) {
        	return false;
        }
        return true;
	}
}[/code]

Aqui o código que cria uma máscara no TextView do Android, ao usuário digitar os números ele acrescenta a "/" automaticamente.

[code]//Máscara data admissão
        textAdmissao.addTextChangedListener(new TextWatcher() {
        	boolean isUpdating;
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int after) {
				if (isUpdating) {
					isUpdating = false;
					return;
				}
				
				boolean hasMask = s.toString().indexOf('/') > -1;
				String str = s.toString().replaceAll("[/]", "");
				if (after > before) {
					if (str.length() > 1) {
						textAdmissao.requestFocus();
						str = str.substring(0, 2) + '/' + str.substring(2);
					}
					if (str.length() > 5) {
						str = str.substring(0, 5) + '/' + str.substring(5);
					}
					isUpdating = true;
					textAdmissao.setText(str);
					textAdmissao.setSelection(textAdmissao.getText().length());
				} else {
					isUpdating = true;
					textAdmissao.setText(str);
					textAdmissao.setSelection(Math .max(0, Math .min(hasMask ? start - before : start, str.length())));
				}
				
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count, int after) {
				
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				
			}
		});[/code]


Depois eu posso validar a data fazendo o seguinte...

[code]//Valida Data
Validador validador = new Validador();
String data = textAdmissao.getText().toString();
boolean opt = validador.validarData(data);


if (opt == false) {
Toast.makeText(SuaClasse.this, "Data inválida!", Toast.LENGTH_LONG).show();
}

[quote=lina]Oi,

Não esquece de seguir as instruções:

  • Pressione o botão de seu primeiro post
  • Acrescente no final do título a tag [RESOLVIDO]

Tchauzin![/quote]

Olá,

Obrigado pelas dicas!
Eu não sabia rs! :slight_smile:

Atte.,
Marco Ostan