sexta-feira, 25 de maio de 2012

Um pouquinho sobre Calendário em java


Fala galera! Neste post vamos repassar à vocês como trabalharmos com data em java, Especificamente jCalendar.

É comum encontrarmos pelas internet em fóruns de programação muitas e muitas dúvidas que começam com  a seguinte pergunta: Como eu faço para pegar a data e a hora do sistema em java ?, bem nesse post eu vou mostrar uma forma bem legal e simples usando o Calendar e o GregorianCalendar são os mais usados atualmente. 

Uma Recomendação que gostaria de dar logo de inicio, não utilizem a classe Date, embora ela ainda funcione está em desuso (deprecated), não é muito conveniente.

Então vamos lá, eu quero simplesmente obter a data do sistema e a hora atual, então como eu faço faço isso?
Bem simples veja.
?
1
Calendar hoje = Calendar.getInstance();

Bem simples não ? temos tudo que queremos no objeto hoje, completo AnoMêsDiaHora Minutos e Segundos, é simplesmente fantástico a simplicidade do Java. Agora vamos aprender a acessar esses esses campos e como formatar no padrão brasileiro, pois como vamos ver essa data segue o estilo americano.

Vamos ver um simples exemplo de código que mostra para nós o toString de uma objeto do tipo Calendar:
?
1
2
3
4
5
6
7
8
9
10
11
12
/**
 * Imprimindo a data e Hora do sistema sem formatação.
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    Calendar hoje = Calendar.getInstance();
    System.out.println( hoje.getTime().toString() );
     
  }
}
Ao rodar esse trecho de codigo o resultado foi o seguinte: Sat Oct 22 21:40:32 BRST 2011, vamos aprender uma forma de exibir naquele formato que estamos acostumado aqui no Brasil. o tão famoso dd/mm/aaaa para datas e o hr : min : seg, para fazermos isso usaremos uma outra classe do java chamada de SimpleDateFormart ela irá formatar uma String com o formato que desejarmos e irá aplicar esse formato ao objeto do "hoje" que contem a data do sistema.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
 * Imprimindo a data e Hora do sistema com formatação.
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    
    Calendar hoje = Calendar.getInstance();
    SimpleDateFormat formataDataHora = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy HH:mm:ss");
     
    System.out.println( formataDataHora.format( hoje.getTime()) );
     
  }
}
Veja que agora temos uma saida formatada e bem familiar, 22 de Outubro de 2011 21:50:17, mas digamos que você não precisa obter data e hora, você que apenas uma String que tenha a hora e outra que tenha a Data separadas e não juntas como estão, então vamos lá ver como fazer isso: Olhe esse outro exemplo:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
 * Imprimindo a data e Hora do sistema com formatação
 * e separadas, Pegando a Data e depois a hora.
 *
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    
    Calendar hoje = Calendar.getInstance();
    SimpleDateFormat formataData = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy");
    SimpleDateFormat formataHora = new SimpleDateFormat("hh:mm:ss");
    String dataDeHoje = formataData.format( hoje.getTime() );
    String horaAgora = formataHora.format( hoje.getTime() );
     
     
    System.out.println( dataDeHoje );
    System.out.println( horaAgora );
  }
}
Ao rodar você verá algo dessa forma:

22 de Outubro de 2011
09:58:03



Bem simples usar o java Calendar, é muito legal, mas vamos aprender mais coisas e se agora eu tivesse a necessidade de criar uma data qualquer? Eu estou atualmente programando um projeto de uma Agenda multimídia onde todos os eventos futuro da agenda necessitam ter suas datas criadas e agora?

Lembram que eu falei do GregorianCalendar? Vamos ver então como criar uma data no futuro ou no passado usando o GregorianCalendar, existem diversas outras maneiras, mas essas eu acho bem legal e simples de usar.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * Criando uma data no futuro ou no passado.
 * E mostrando uma outra formatação para as datas.
 * usamos o GregorianCalendar que permitimos criar
 * uma data com ano, mes, dia, hora, minutos
 * e segundos.
 *
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    
    Calendar data;
     
    //lembre-se data =  new GregorianCalendar ( Ano, Mês, dia, Hora, Minuto, Segundo )...
    data = new GregorianCalendar ( 2011, 03, 05, 10, 20, 05);
     
    SimpleDateFormat formataData = new SimpleDateFormat("dd/MM/yyyy");
     
    System.out.println( formataData.format( data.getTime() ) );
     
  }
}
Preste atenção num detalhe importante olhe o resultado : 05/04/2011, tá errado ? Eu tinha escrito 03 para o Mês e ele mostrou 04  e agora, calma! O java começa a contar os meses do 0, dessa forma janeiro é 0, fevereiro e´ 1 e assim por diante, é bom lembrar disso.

Para finalizarmos esse post sobre o java Calendar vamos ver como obter os campos ano , mês, dia, hora, minutos e segundo de uma data é sempre útil em muitos programas recuperar esses valores das data e mais importante ainda é poder comparar duas datas. veja primeiro como recuperar os valores do campos de uma data.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * Mostrado como recuperar os campos.
 *
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    
    Calendar data;
     
    //lembre-se data =  new GregorianCalendar ( Ano, Mês, dia, Hora, Minuto, Segundo )...
    data = new GregorianCalendar ( 2011, 03, 05, 10, 20, 15);
     
    SimpleDateFormat formataData = new SimpleDateFormat("dd/MM/yyyy - hh:mm:ss");
     
    int dia, mes, ano, hora, minuto, segundo;
     
    ano = data.get(Calendar.YEAR);
    mes = data.get(Calendar.MONTH) + 1; //lembre-se que começa no 0, JANEIRO = 0;
    dia = data.get(Calendar.DAY_OF_MONTH );
    hora = data.get(Calendar.HOUR_OF_DAY);
    minuto = data.get(Calendar.MINUTE);
    segundo = data.get(Calendar.SECOND);
     
    System.out.println( formataData.format( data.getTime() ) );
    System.out.println( dia +"/"+mes+"/"+ano+" - "+hora+":"+minuto+":"+segundo );
     
  }
}

Bom o mais importante vem agora e se eu precisar comparar duas Data? eu preciso saber se uma outra é superior a outra hora, ou se uma determinado tempo foi excedido, como eu faço isso? Bem vamos lá nada de complicação basta fazer isso 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * Comparar duas datas para dizer qual
 * hora e maior.
 *
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    
    Calendar data, outraData;
     
    //lembre-se data =  new GregorianCalendar ( Ano, Mês, dia, Hora, Minuto, Segundo )...
    data = new GregorianCalendar ( 2011, 03, 05, 10, 20, 15);
    outraData = new GregorianCalendar ( 2011, 03, 05, 11, 20, 15);
     
     
   // SimpleDateFormat formataData = new SimpleDateFormat("dd/MM/yyyy - hh:mm:ss");
     
    if ( data.getTimeInMillis() > outraData.getTimeInMillis() ){
      System.out.println( "sim!" );
    }
    else{
      System.out.println( "Nao" );
    }
     
     
  }
}

Para fecharmos tudo vou apenas citar como fazer para adicionar um hora, um minuto, ou um segundo numa data, de forma semelhante acontece com dias, mês e anos.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
 * Somando hora, minutos , segundo... em uma data.
 *
 * @author samuel santos
 *
 */
public class Datas{
  public static void main(String args[]){
    
    Calendar hoje = Calendar.getInstance();
     
     
     SimpleDateFormat formata = new SimpleDateFormat("dd/MM/yyyy - hh:mm:ss");
    
     //vamos adicionar 60 minutos a esta data
     hoje.add(Calendar.MINUTE, 10);
     hoje.add(Calendar.HOUR, 2);
         
    System.out.println("Daqui 2 hora a 10 minutos será: " + formata.format(hoje.getTime()));
     
  }
Espero que tenha sido de grande ajuda. Até a próxima!

Nenhum comentário:

Postar um comentário

Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.