Ola amigos, o que eu uso uso para comparar o dia e mes entre 2 datas. Ou seja, preciso comparar o dia e o ano entre a data_atual e data_passada.
Não sei se entendi o que vc quer, mas seria algo assim?
Calendar dataUm = Calendar.getInstance();
dataUm.setTime(new Date());
Calendar dataDois = Calendar.getInstance();
dataDois.setTime(new Date());
int mesUm = dataUm.get(Calendar.MONTH);
int mesDois = dataDois.get(Calendar.MONTH);
Para pegar o dia Calendar.DAY e o ano Calendar.YEAR.
Não sei se tem um modo mais prático, mas é o que me veio a cabeça :lol:
Flw.
Pode usar tb os metodos before e after :lol:
Mas aí seria uma comparação de toda a data e não especificamente do mês, dia ou ano.
Já que está usando datas, pense com muito, muito, muito carinho na possibilidade de deixar o Calendar de lado e usar o JODA-Time:
http://joda-time.sourceforge.net/
Eu estou tentanto fazer o seguinte:
Pegar a data_atual (isso ja consegui) Date data_atual = new Date(System.currentTimeMillis());
e comparar ela com outra data, mas precisa ser o mes e o dia. Ou seja , se, data_atual = 14/[b]01/2009e data_passada = 14/01/2008 , naum atende o que eu preciso. Agora se a data_atual = 14/01/2009[b] e data_passada = 30/01/2009[b] , atende. Concluindo, preciso comparar as 2 duas datas e ver as 2 estão no mesmo mes e ano.
Naum sei, se esse tipo de comparação entre meses e dias é possivel através do before,after ou compareTo.
Brother, sua pergunta faz parte da série “perguntas padrões que tem seus tópicos garantidos toda semana”. Em outras palavras, sua pergunta já foi repetidamente respondida.
Não se usa a classe Date para trabalhar com datas. Você pode notar que praticamente todos os métodos dessa classe estão deprecated. No lugar, use a classe Calendar ou GregorianCalendar. Ou recorra a API Joda-Time, que eu já passei.
Depois disso, fica fácil. Você pode obter qualquer campo de uma data através do método get.
[code]Calendar hoje = Calendar.getInstance();
int dia = hoje.get(Calendar.DAY_OF_MOTH);
int mes = hoje.get(Calendar.MONTH);
int ano = hoje.get(Calendar.YEAR);[/code]
Repita o processo para a outra data e aí basta usar ifs, como você faria com qualquer programa normal.
Me desculpe pela burrice, mas hj é o primeiro dia que trabalho com data, até os exemplos que procurei e fiz eu entendi. Mas no entanto naum consegui achar uma forma de aplicar no que estou desenvolvendo.
--- pegando data atual
Date data_atual = new Date(System.currentTimeMillis());
-- guardando em uma variavel o que vem do banco de dados.
Date dt_fat = B1.OPCH.getDate("data_fat");
-- tentando compararar as datas
if(dt_fat.before(data_atual)){
vl_vencer_acumul = B1.OPCH.getDouble("Comprado_Acum");
}else{
vl_vencer_acumul = 0;
}
Eu sei que esta errado, pq esta comparando apenas a data_fat com a data_atual, no entanto , naum sei como fazer para comparar um mes inteiro.
Comece não usando a classe Date.
Entaum… depois de uma boa googleada começando a partir das dicas que peguei aqui no fórum e consegui chegar a uma solução que esta ai em baixo.
-- pegando a data atual
Date data_atual = new Date(System.currentTimeMillis());
-- pegando a data que esta no banco
Date dt_fat = B1.OPCH.getDate("data_fat");
-- calculando a diferenca de dias entre a data_atual e data que vem do banco de dados
long DAY = 24L * 60L * 60L * 1000L;
long diferenca = (( data_atual.getTime() - dt_fat.getTime() ) / DAY );
Espero que isso possa ajudar, ja que foi muito util esse metodo para calcular a diferença entre dias.
Raphael, você gosta mesmo de sofrer, não?
Na API que eu indiquei você faria assim.
LocalDate dataAtual = new LocalDate();
LocalDate dt_dat = new LocalDate(B1.OPCH.getDate());
int dias = dataAtual.daysBetween(dt_dat);
Outra coisa, você continua usando a classe Date, no lugar de Calendar. Todos os respondentes aqui disseram para você não fazer isso. Se a idéia é não ler as sugestões do tópico, por que postou sua dúvida no GUJ, em primeiro lugar?
Seu método é rebuscado, extremamente sujeito a erros, difícil de manter, e ainda usa uma classe cuja a API inteira está deprecated. Tem realmente certeza que você vai manter o código assim? Você está resolvendo um problema trivial de datas e é provável que calculos mais complexos do que esse vão surgir no seu sistema.
Por isso, gaste alguns minutos para aprender o Joda-Time que sugeri ali em cima, e poupe si mesmo de muita dor de cabeça.
Meu Deuuuss…o cara parece que tá ignorando os posts hahaha
:shock:
ta bom entaum… vou fazer conforme vcs me indicaram. Muito obrigado pela atenção de vcs e eu naum ignorei o que vcs me indicaram, eu achei esse metodo pro acaso na net , e como ele atendeu minhas expectativas eu achei que estaria certo,pois até agora eu nunca trabalhei com data. :oops:
cuidado para nao “googlamar” ao invez de programar… tem muita gente q começa assim e depois nao sabe nem o q ta fazendo, apenas copiando codigo pronto da internet…
abraco!
Pode cre… agora estou estudando o gregorian calendar, depois que eu acabar eu posto o que eu fiz, para ver se ficou correto… até agora estou entendendo. vlw
Entaum… to tentando comparar o mes atual com o dia do vencimento que vem do banco de dados. Fiz desta forma:
Mas quando eu rodo meu programa me mostra que todos os resultados são diferentes, mas, isso não é verdade, exitem registros com o mesmo mes= ao de hoje. pex: vencimento = 11/01/2008 e data_atual 16/01/2009, os meses são iguais.
Calendar cal_atual = new GregorianCalendar();
Calendar cal_venc = new GregorianCalendar();
int mes_at;
int mes_vt;
cal_atual.setTime(data_atual);
cal_venc.setTime(B1.OPCH.getDate("data_venc"));
if(cal_venc.equals(mes_at)){
System.out.print("iguais");
}else{
System.out.print("diferentes");
}
Cuidado - há uma sutileza aqui. Quando você puxa uma data do banco e compara com a data atual (por exemplo), pode ser que o dia, mês e ano sejam os mesmos, mas a hora, minuto e segundo sejam diferentes, o que provoca o retorno de “equals” como false em vez de true.
Se for usar GregorianCalendar ou Calendar, zere os campos hora, minuto, segundo e milissegundo dos dois elementos antes de comparar, para evitar choro e ranger de dentes.
Pessoal como faço a seguinte operação ex: pego a data atual adiciono 15, vai dar 1 de agosto na quarta feira, pois meu cliente quer receber suas noticias somente na terça e de 15 em 15 dias então compara a minha data final, e atribuir o valor correto para próxima terça dia 31/07.
Pois quero garantir que somente a próximo disparo de newsletter seja somente na segunda após 15 dias
Grato
Cuidado ao reviver tópicos antigos,
não sei se nesse caso foi correto ou não, mas em todo caso, para resolver o seu problema, leia sobre o método add, da API de Calendar. Na própria documentação tem um exemplo.