Duvida com Datas

24 respostas
S

Boa noite.

preciso fazer um aplicativo que me informe o seguinte:

após 30 dias um aviso de alerta aparece ao usuario

o aplicativo precisa estar rodando constantemente no task bar para que essa logica funcione, assim o usuario nao precisa estar abrindo ele sempre…

acredito que devo usar a biblioteca Timer, mas nao sei como…

alguma dica?

24 Respostas

drsmachado

O aplicativo precisa rodar, não necessariamente na taskbar. O que eu faria seria uma classe com dois campos Date, um para pegar a data inicial (ponto de partida) e outro para pegar a data corrente (quando o programa estiver em execução), até coincidir os 30 dias ou mais, pois o computador pode não ser ligado no 30º.

S

entendi drsmachado… eu estava pensando em fazer algo assim

usuario digita data de expiração, o aplicativo pega a data do sistema e calcula… quando chegar na data dispara o alarme com base na data do sistema

na verdade seria preciso que rodasse da task bar, pois atrapalharia o usuario se ficar aberto… não acha?

drsmachado

Deixar isto por conta do usuário é perigoso. E se ele digita uma data maior?
Eu prefiro estipular esse prazo (também é possível determinar a data final a partir da inicial e ir comparando, dia a dia, se a data é igual ou maior).

S

veradade…

usuario entrar com data de expiração é perigoso…
fica para o desenvolvedor estipular a data de expiração apartir da data de entrada…

uso a biblioteca timer?

drsmachado

Isso fica a teu critério.
Embora eu ache desnecessário.

S

entao… o problema é esse… como faço para contar os dias? preciso de dias reais… nao sei como

S

vou tentar explicar denovo…

fulano entra no aplicativo

escolhe opção X na data YY/YY/YYYY

aplicativo informa que opção X expira na data BB/BB/BBBB

quando chegar na data BB/BB/BBBB o aplicativo dispara um alarme

como controlo os dias?

é minha unica duvida… por favor

Anime

Oi,

Se a data for igual a BB/BB/BBBB então dispara… Acho que não entendi rs…

Se for o que estou pensando é + ou - isso…

int dia=0;// inicia a variavel dia com valor 0   
              dia=Integer.parseInt(tf_prazo.getText());//faz a conversão
           switch(dia)
          {
             case 1:dia=1;// se o usuario digitar quantidade de dias 1
                data.add(Calendar.DAY_OF_MONTH, 1);// acrescenta um dia 
                lb_datareceb.setText(format.format(data.getTime()));// label recebe a data atual mais um dia
             break;
             case 2:dia=2;// se o usuario digitar quantidade de dias 2
                 data.add(Calendar.DAY_OF_MONTH, 2);// acrescenta dois dias 
                 lb_datareceb.setText(format.format(data.getTime()));// label recebe a data atual mais dois dias
             break;
             case 3:dia=3;
               data.add(Calendar.DAY_OF_MONTH, 3);
               lb_datareceb.setText(format.format(data.getTime()));
             break;

Hoje estou boazinha… :roll:

S

por exemplo…

usuario insere algo na data de hoje e

quando chegar na data 08/08/11, dispara um aviso qualquer…
ou seja quando a data do sistema chegar a 08/08/11, dispara um aviso qualquer

entendi pouca coisa desse código

poderia me explicar?

ps: como se fosse um despertador, porem em vez de horas é dia

Anime

SilverHawk:
por exemplo…

usuario insere algo na data de hoje e

quando chegar na data 08/08/11, dispara um aviso qualquer…
ou seja quando a data do sistema chegar a 08/08/11, dispara um aviso qualquer

entendi pouca coisa desse código

poderia me explicar?

ps: como se fosse um despertador, porem em vez de horas é dia

Como assim insere algo, o que é algo…

Estou supondo que hoje 07/06/2011, seu usuario faz algo e o prazo vence em 07/07/2011 e ai o sistema envia uma mensagem quando chegar na data… Então, cheguei perto?

http://www.javabr.com/blog/java-2/efetuando-calculos-com-data-em-java/

http://simundi.blogspot.com/2007/03/datas-em-java-ainda-existe-dvida.html

S

esse algo é uma entrada qualquer… um texto… uma hipotese

sim é isso mesmo que voce disse… o sistema envia uma msg quando chegar a data…

é isso que o código faz? pq usar um switch? e nao uma verificação na hora do sistema e comparar

exemplo

se data do sistema é == a data de vencimento, entao dispara mensagem…

Anime

SilverHawk:
esse algo é uma entrada qualquer… um texto… uma hipotese

sim é isso mesmo que voce disse… o sistema envia uma msg quando chegar a data…

é isso que o código faz? pq usar um switch? e nao uma verificação na hora do sistema e comparar

exemplo

se data do sistema é == a data de vencimento, entao dispara mensagem…

Ué foi a primeira opção que eu indiquei rsrs…

S

nossa é verdade… seu código ficou mais claro quando li o conteudo dos links que voce me passou…

muito obrigado!!

aproveitando o tópico…

voce sabe como colocar o aplicativo rodando sempre no taskbar?
por exemplo… ao clicar um botao vai para o task bar e fica rodando em background no SO

Anime

Não, vou ficar devendo rs… :oops:

Por nada… :wink:

S

bom dia

fiz diferente, usei o Date mesmo

aqui está minha classe

public void desperta()throws Exception{
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
        
        Date minha = format.parse("08/06/2011"); // dia atual
        Date minha2 = format.parse("09/06/2011"); // um dia depois
  
        if (minha.after(minha2))   
       JOptionPane.showInputDialog("oieeeeeeeeeee");  
         
            
       
   }

teria que aparecer uma mensagem quando clicasse no RadioButton

private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Despertador d = new Despertador();
        try {
            d.desperta();
        } catch (Exception ex) {
            Logger.getLogger(Despertador2.class.getName()).log(Level.SEVERE, null, ex);
        }
     
    }

no caso eu mudei a data do SO com o aplicativo rodando e coloquei uma data depois da definida "08/06/2011"

o trecho

if (minha.after(minha2))   
       JOptionPane.showInputDialog("oieeeeeeeeeee");

faz a comparação

mas nao funciona... :(

nel

Oi!

1 - Para esse caso em particular não vai apresentar nada mesmo, já que o método after() vai retornar false.

2 - Use Calendar para manipulação de datas.

Abraços.

S

perae que fiz coisa confusa… :?

nel

Por favor, poste o método completo de comparação, como realmente estão as variavéis e a lógica.
Pois postou duas partes e nas duas partes há diferença de nome de variavél.

E leia aqui

Abraços.

S

método despertar

public void desperta()throws Exception{
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
        
        //Date minha = format.parse("08/06/2011");
        Date minha2 = format.parse("09/06/2011"); 
        Date atual = new Date();
        if (minha2.after(atual)) //{  
       JOptionPane.showInputDialog("oieeeeeeeeeee");  
        //} else if (minha.before(minha2)) {  
         // O dia já aconteceu  
          //  }
       
   }

pequena alteração... a "minha2" é true e entao exibe a mensagem

método JRadioButton

private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        Despertador d = new Despertador();
        try {
            d.desperta();
        } catch (Exception ex) {
            Logger.getLogger(Despertador2.class.getName()).log(Level.SEVERE, null, ex);
        }
     
    }
nel

Oi!

public static void main(String[] args) throws ParseException {
	    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");   	           
	    //Date minha = format.parse("08/06/2011");   
	    Date minha2 = format.parse("09/06/2011");   
	    Date atual = new Date();   
	    if (minha2.after(atual)) //{     
		   System.out.println("after");
	    
	    if(atual.before(minha2))
		   System.out.println("before");	         
	}

Mostrou “after” e “before” perfeitamente.
Não é isso mesmo que você queria ou se testar em seu código, o “after” não é apresentado?

Abraços.

S

sim o teste que eu queria deu certo… agora tenho que ver se o aplicativo tem que exibir a mensagem 30 dias após (30 dias corridos) ou em uma data especifica…
se for 30 dias após a atual eu teria que usar Calendar para acrescentar dias, certo?

tem como transformar os dias do Calendar para o Date e fazer a comparação com o after?

nel

SilverHawk:
sim o teste que eu queria deu certo… agora tenho que ver se o aplicativo tem que exibir a mensagem 30 dias após (30 dias corridos) ou em uma data especifica…
se for 30 dias após a atual eu teria que usar Calendar para acrescentar dias, certo?

tem como transformar os dias do Calendar para o Date e fazer a comparação com o after?

Sim, com o getTime(). O método lhe retorna o Date.
Mas, para esse caso em particular, trabalhe diretamente com o Calendar, é preferível.

Mas faça o teste, adicione os dias de acordo com a necessidade e posteriormente faça o after.
De qualquer forma, leia sobre o Calendar, há inúmeros exemplos no GUJ e na Net ok?

Abraços amigo.

S

ok… obrigado pela ajuda nel!

vou continuar os testes

:thumbup:

nel

SilverHawk:
ok… obrigado pela ajuda nel!

vou continuar os testes

:thumbup:

Que isso, de nada.
Qualquer dúvida, poste ai!

Abraços!!!

Criado 7 de junho de 2011
Ultima resposta 8 de jun. de 2011
Respostas 24
Participantes 4