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
DateTime date = new DateTime("2010-2-21T20:19:45.000-03:00");
System.out.println(date.toString("dd/MM/yyyy HH:mm:ss"));
  • Soma de dias escolhendo o ano
LocalDate localDate = new LocalDate();
LocalDate moreDays = localDate.withYear(2008).plusDays(8);
System.out.println(moreDays.toString("dd/MM/yyyy"));
// 29/02/2008
  • Dia da semana por extenso
DateTime dateTime = new DateTime();
String dayOfMonth = dateTime.dayOfWeek().getAsText();
System.out.println(dayOfMonth);
// Domingo
  • Quantidade de dias entre um dia e outro
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
  • Diferença de horas entre fusos horários.
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

Até mais,
Roberto

Share