Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Comparação de datas

Fala, pessoal.

Na comparação entre datas, pode-se fazer assim?

if (dataAtual.equals(visita.getDataAgendada())) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FA0101"));
            }
                else if (dataAtual.after(visita.getDataAgendada())){
                    barra_indicadora.setBackgroundColor(Color.parseColor("#FA0101"));
                }
                else if (dataAtual.before(visita.getDataAgendada())) {
                    barra_indicadora.setBackgroundColor(Color.parseColor("#FFE500"));
                }
                else
                    barra_indicadora.setBackgroundColor(Color.parseColor("#12C119"));

A data atual está como private Calendar dataAtual = Calendar.getInstance(); e a data agendada como String dataAgendada = campo_data_situacao_agendada.getEditText().getText().toString();`

A data agendada está sendo informada pelo usuário pelo DatePickerDialog. Porém, fiquei na dúvida dessa comparação entre tipos diferentes (o Calendar e a String que pego do EditText). Obrigado.

7 respostas

Thiago, tudo bem?

Cara não rola comparar um Calendar com uma String.

Você vai precisar transformar sua String num calendar

Você pode fazer algo parecido com isso para fazer sua conversão:


Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/YYYY", Locale.getDefault());
cal.setTime(sdf.parse(visita.getDataAgendada()));

Embora talvez você tenha problemas devido ao horário, calendar tem essa zika, talvez usar a api nova de data do java faça sentido pra tu, o pacote java.time, por exemplo você tem LocalDate que representa apenas data, sem horário.

Deu não. Sei que é normal, mas tô ficando sem paciência já rs. Mandei um e-mail para o atendimento, pq não estou dando conta mais... perguntei se tem um plano, por exemplo, de ajuda direta para desenvolver esses tipos de projetos específicos... nem eu tô entendo mais meu programa. Te elogiei, claro, pois me ajudou e muito. Você sabe se tem? Vc faz?

Fala, Matheus. Analisando novamente, com calma, mudei o código para:

private void verificaDataMudaCor(View view, Visita visita) throws ParseException {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/YYYY");

        Date dataAgendadaFormatada = sdf.parse(visita.getDataAgendada());

        String DataAtualString = sdf.format(cal.getTime());
        Date dataAtualFormatada = sdf.parse(DataAtualString);

        View barra_indicadora = view.findViewById(R.id.item_barra_indicadora_situacao);

        if (visita.getSituacao().equals(SITUACAO_CONTATO_ESCOLA_PARA) || visita.getSituacao().equals(SITUACAO_AMBIENTACAO_PARA)) {
            if (dataAtualFormatada.equals(dataAgendadaFormatada)) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FA0101"));
            } else if (dataAtualFormatada.after(dataAgendadaFormatada)) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FA0101"));
            } else if (dataAtualFormatada.before(dataAgendadaFormatada)) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FFE500"));
            } else
                barra_indicadora.setBackgroundColor(Color.parseColor("#12C119"));
        }
        notifyDataSetChanged();
    }

Fiz um teste de cores e a programa está parando na primeira opção. Fiz as conversões erradas antes do IF?

Sobre a mensagem anterior, tô vendo essa viabilidade de alguém fazer e depois eu tentar dar manutenção kkkkkkkkk.

A primeira pergunta:

A alura não faz essa trabalho, infelizmente :(

Em geral, até esse tipo de dúvida não deveríamos dar tanto suporte, pq não tem tanto haver com os cursos da plataforma, mas mesmo assim ajudamos porque sabemos que pro aluno é importante :)

Se for pegar procurar alguém para fazer, sugiro olhar na comunidade android : Android Dev Br, dá uma olhadinha nisso depois e vê se alguém pega pra fazer isso pra tu.

Valeu pela dica e pela ajuda que está dando. Vou tentar mais um pouco e qualquer coisa entro lá na comunidade. Já tá salva aqui hehe.

solução!

Sobre seu código da cor e tals

O calendar, ele tem horário, o que zoa toda sua comparação, ou seja mesmo que seja a mesma data, o momento nunca será o mesmo, entenda momento sendo: dia, mes ano, hora, minuto, segundo.

Além disso, o ano usamos: yyyy e não YYYY uppercase e lowercase tem diferenças nesse caso.

O que talvez faça sentido pra você é no primeiro caso validar se as Strings são iguais, dado que seu parser está funcionando, o antes e depois rola.

if (DataAtualString.equals(visita.getDataAgendada())) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FA0101"));
            } else if (dataAtualFormatada.after(dataAgendadaFormatada)) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FA0101"));
            } else if (dataAtualFormatada.before(dataAgendadaFormatada)) {
                barra_indicadora.setBackgroundColor(Color.parseColor("#FFE500"));
            } else
                barra_indicadora.setBackgroundColor(Color.parseColor("#12C119"));

Rapaz, arrumando o yyyy já resolveu tudo. Obrigado. rsrs

Esse não foi complicado. Aleluia \o/ hahahaha