quinta-feira, 29 de dezembro de 2011

Operações com Datas

Se lembrarmos da definição de Data que representa o número de  milisegundos que passaram deste 1º de Janeiro de 1970 00:00:00.000 GMT. Temos que as operações operações de adicionar ou substrair tempos podem ser manuseadas como operações matemáticas com inteiros:

import java.util.Date;


public class ExemploData3 {
 public static void main(String[] args) {
Date agora = new Date();
long t = agora.getTime();

// 7 dias atrás:
// equivale a achar t menos
//  7 dias x 24 horas x 60 minutos x 60 segundos x 1000 milisegundos
Date seteDias = new Date( t - 7 * 24 * 60 * 60 * 1000);
System.out.println("Sete dias atras era " + seteDias);

// daqui a sete dias
seteDias = new Date( t - 7 * 24 * 60 * 60 * 1000);
System.out.println("Daqui a sete dias serao " + seteDias);
 }
}


Esta é uma classe funcional mas não é a melhor forma de realizar operações sobre datas. O Java possui uma classe denominada java.util.Calendar que permite trabalhar melhor com estes valores:


import java.util.Calendar;
import java.text.SimpleDateFormat;


public class ExemploData4 {


    public static void main(String[] args) {
Calendar data = Calendar.getInstance( );
// formatação a ser utilizada para apresentação das datas
SimpleDateFormat sfmt = new SimpleDateFormat("dd/MM/yyyy '-' hh:mm:ss");
System.out.println("data (agora): " + sfmt.format(data.getTime()));

// obter 2 anos atras
Calendar doisAnosAtras = data;
doisAnosAtras.add(Calendar.DAY_OF_YEAR, -(365*2));
System.out.println("dois anos atras : " +
sfmt.format(doisAnosAtras.getTime()));

Calendar doisAnosAtrasSegundaOpcao = data;
doisAnosAtrasSegundaOpcao.add(Calendar.YEAR, -2);
System.out.println("dois anos atras (segunda opcao): " +
sfmt.format(doisAnosAtrasSegundaOpcao.getTime()));

// compara as datas
// existe um método Calendar.before(data) veja na documentação 
if (doisAnosAtras.after(data)) {
  System.out.println("doisAnosAtras tem data posterior a data");
} else {
  System.out.println("doisAnosAtras tem data anterior a data");
}

if (doisAnosAtrasSegundaOpcao.equals(doisAnosAtras)) {
  System.out.println("doisAnosAtrasSegundaOpcao igual a doisAnosAtras");
} else {
  System.out.println("doisAnosAtrasSegundaOpcao diferente de doisAnosAtras");
}
    }
}



Nenhum comentário:

Postar um comentário