Я использую Spring MVC на компьютере, на котором настроено летнее время (часовой пояс Америки / Sao_Paulo).В своем классе формы я использовал аннотацию DateTimeFormat для настройки вывода моей даты:
public class JustificativaOcorForm {
...
@NotNull
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date dataMarcacao;
...
}
Во время отладки я получаю дату 16/10/2011 (дд / мм / гггг), которая является началомдневное время, но весна преобразует его в 2011-10-15.Почему?
2011-11-04 16:35:31,965 [http-8080-Processor25] DEBUG org.springframework.core.convert.support.GenericConversionService - Converting value Sun Oct 16 00:00:00 BRST 2011 of [TypeDescriptor @javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.util.Date] to [TypeDescriptor java.lang.Long]
2011-11-04 16:35:31,965 [http-8080-Processor25] DEBUG org.springframework.core.convert.support.GenericConversionService - Converted to 1318730400000
2011-11-04 16:35:32,010 [http-8080-Processor25] DEBUG org.springframework.core.convert.support.GenericConversionService - Converted to '2011-10-15'
Я вижу этот вопрос: @ DateTimeFormat в Spring выдает ошибку по одному за день
, но Spring 3 использует Joda-Time, и у меня естьjoda-time-2.0.jar в моем классе, так что я не знаю, почему это происходит и как я могу это решить.
[РЕДАКТИРОВАТЬ]
Я имеюпроверил создание объектов LocalData и нашел кое-что:
LocalDate ld = new LocalDate( new SimpleDateFormat("dd/MM/yyyy").parse("16/10/2011").getTime() );
System.out.println( new SimpleDateFormat("dd/MM/yyyy HH:mm:ss Z z").format( ld.toDate() ) );
//prints 15/10/2011 00:00:00 -0200 BRST
LocalDate ld2 = new LocalDate( 2011,10,16 );
System.out.println( new SimpleDateFormat("dd/MM/yyyy HH:mm:ss Z z").format( ld2.toDate() ) );
//prints 16/10/2011 00:00:00 -0200 BRST
Кажется, что первый подход - думать, что время в UTC, потому что при отладке я вижу, что Joda использует метод convertUTCToLocal класса DateTimeZone.
Может быть, это тоже значение по умолчанию для Spring, он ожидает и одну дату в UTC, и я передаю дату BRT.
Так что я думаю, что мое решение - изменить объекты на LocalDate и использоватьВторой способ создания экземпляра этого объекта.