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!

Comentários

Postagens mais visitadas deste blog

Algorítimo Para Validar Cpf Segundo Receita Federal em Java

Executar Audio em Java Swing

Gerenciamento de projetos: Introdução, Experiência e Estudo - Parte I