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
muito interessante
Excelente Roberto.
Gostei dos exemplos, são muito claros.