Pular para o conteúdo

Simplificando cálculos com datas com Joda Time – Java

Olá!

Quem precisou fazer contas com java.util.Date ou java.util.Calendar saber o trabalho que dá e como a API nativa do Java (até o Java 6 pelo menos) não ajuda muito a fazer coisas simples como adicionar horas na data atual. A API Joda Time veio para simplificar o trabalho com datas no Java, tanto é que muitas idéias dessa API tem grande chance de estarem no Java 7 através da JSR-310.

O que eu mais gostei do Joda Time são os método toString() que aceitam como parâmetro o padrão de formatação (não preciso criar mais SimpleDateFormat para formatar os benditos java.util.Date!!! parecido com o do C#),  inicialização do objeto com String e o uso de interfaces fluentes.

Abaixo exemplos de uso.

  • Inicialização do objeto com String

[sourcecode lang=”java”]DateTime date = new DateTime(“2010-2-21T20:19:45.000-03:00”);
System.out.println(date.toString(“dd/MM/yyyy HH:mm:ss”));[/sourcecode]

  • Soma de dias escolhendo o ano

[sourcecode lang=”java”]LocalDate localDate = new LocalDate();
LocalDate moreDays = localDate.withYear(2008).plusDays(8);
System.out.println(moreDays.toString(“dd/MM/yyyy”));
// 29/02/2008[/sourcecode]

  • Dia da semana por extenso

[sourcecode lang=”java”]DateTime dateTime = new DateTime();

String dayOfMonth = dateTime.dayOfWeek().getAsText();
System.out.println(dayOfMonth);
// Domingo[/sourcecode]

  • Quantidade de dias entre um dia e outro

[sourcecode lang=”java”]DateTime inicio = new DateTime(2010, 2, 21, 0, 0, 0, 0);

DateTime fim = new DateTime(2010, 2, 22, 13, 30, 0, 0);
System.out.println(Days.daysBetween(inicio, fim).getDays());
// 1
System.out.println(Hours.hoursBetween(inicio, fim).getHours());
// 37
System.out.println(Minutes.minutesBetween(inicio, fim).getMinutes());
// 2250[/sourcecode]

  • Diferença de horas entre fusos horários.

[sourcecode lang=”java”]DateTime agora = new DateTime();
DateTime saoPaulo =
agora.withZoneRetainFields(DateTimeZone.forID(“America/Sao_Paulo”));
DateTime rioBranco =
agora.withZoneRetainFields(DateTimeZone.forID(“America/Rio_Branco”));
DateTime japao =
agora.withZoneRetainFields(DateTimeZone.forID(“Asia/Tokyo”));
DateTime londres =
agora.withZoneRetainFields(DateTimeZone.forID(“Europe/London”));

System.out.println(Hours.hoursBetween(japao, saoPaulo).getHours());
System.out.println(Hours.hoursBetween(londres, saoPaulo).getHours());
System.out.println(Hours.hoursBetween(rioBranco, saoPaulo).getHours());
// Diferença de horas entre Japão e São Paulo: 12

// Diferença de horas entre Londre e São Paulo: 3

// Diferença de horas entre Rio Branco/AC e São Paulo: -1[/sourcecode]

Até mais,
Roberto

2 comentários em “Simplificando cálculos com datas com Joda Time – Java”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *