У меня есть класс, у которого есть поле даты, представляющее дату «с начала» для части данных. Это определяется так:
@Temporal( TemporalType.DATE )
private Date validFrom;
Кажется, все работает нормально, вплоть до того момента, когда я извлекаю дату из базы данных и отображаю ее. Если я выберу дату 18-Sep-2003 во внешнем интерфейсе, то сохраню ее, когда я проверю базу данных, достаточно точно, чтобы это была проведенная дата (база данных MySQL 5.5.9, тип столбца - DATE). Однако, когда я открываю список записей, показанная дата - 17 сентября 2003 года - на один день раньше.
Если я выберу дату в начале или конце года, например, 26 марта 2003 г. или 25 декабря 2003 г., все будет в порядке, поэтому я предполагаю, что это как-то связано с переходом на летнее время, но где закрадывается ошибка? Поскольку база данных, похоже, содержит правильную дату, я предполагаю, что это должно быть, когда JPA преобразует обратно в java.util.Date. Является ли java.util.Date лучшим классом для даты? Я видел несколько примеров, когда люди используют Calendar, но он кажется довольно тяжелым, и я не уверен, насколько хорошо он будет работать с интерфейсом на основе JSF.