Lidando com horas e datas - Joda Time

Joda Time é uma maravilhosa biblioteca de manipulação de datas e horas. O objetivo é resolver os problemas introduzidos pela API padrão de datas do Java.

O VRaptor já tem prontos para uso quatro conversores para classes da Joda Time comumente utilizadas em aplicações WEB:

  1. org.joda.time.LocalDate representando datas (somente data, sem informação de horário).
  2. org.joda.time.LocalTime representando alguma hora do dia.
  3. org.joda.time.YearMonthDay antiga representação de datas. Não deve mais ser usada.
  4. org.joda.time.TimeOfDay antiga representação de alguma hora do dia. Não deve mais ser usada.

Os conversores se baseiam no Locale atual do usuário. Este Locale define o formato de entrada dos dados, assim como nos conversores LocaleCalendarDateConverter e LocaleCalendarTimeConverter.

Os dados de entrada devem ser sempre no formato curto: DateFormat.SHORT. Exemplo: dd/MM/aaaa e hh:mm para Locale pt_BR.

Usando os conversores

Basta abilitar aqueles que serão usados no arquivo de configuração vraptor.xml:

<vraptor>
        <converter>org.vraptor.converter.joda.LocalDateConverter</converter>
        <converter>org.vraptor.converter.joda.LocalTimeConverter</converter>

        <!-- Os antigos agora estão depreciados -->
        <converter>org.vraptor.converter.joda.YearMonthDayConverter</converter>
        <converter>org.vraptor.converter.joda.TimeOfDayConverter</converter>
</vraptor>

Eu quero uma data!

Caso você precise de uma data (lembrando que não é timestamp), pode usar o parâmetro do método para ler os dados enviados na requisição:

package org.vraptor.example.joda.time;

import org.joda.time.LocalDate;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.Parameter;

@Component("myComponent")
public class MyComponent {

        private LocalDate date;

        public void method(LocalDate date) {
                System.out.println("Date: " + date);
                this.date = date;
        }

        public LocalDate getDate() {
                return this.date;
        }
}

Pronto! Basta apontar para http://domain.com/context/myComponent.method.logic?date=1/1/1970 e o atributo com a data será automaticamente preenchido!

Preciso das horas!

Para receber um horário fornecido pelo usuário, basta novamente ler o parâmetro da requisição usando parâmetro do método:

package org.vraptor.example.joda.time;

import org.joda.time.LocalTime;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.Parameter;

@Component("myComponent")
public class MyComponent {

        private LocalTime time;
        
        public void method(LocalTime time) {
                System.out.println("Time: " + time);
                this.time = time;
        }
        
        public LocalTime getTime() {
                return this.time;
        }
}

Pronto! Novamente aponte para http://domain.com/context/myComponent.method.logic?time=11:30 e o atributo com o horário será automaticamente preenchido!