@DateTimeFormat в Spring выдает ошибку на один день - PullRequest
3 голосов
/ 19 октября 2011

В настоящее время я использую @DateTimeFormat в доменном объекте следующим образом:

@DateTimeFormat(pattern = "MM/dd/yyyy")
private Date startDate = new Date();

В Spring MVC Controller я публикую сегодняшнюю дату: 19.10.2011 с использованием средства выбора даты jQuery UI иЯ подтверждаю, что это отправляется как параметр HTTP Post с помощью firebug следующим образом:

startDate=10%2F19%2F2011

К сожалению, как только он попадает в Spring на сервере, он сохраняет дату как 18.10.2011 - естьошибка за один день.

В моем коде нет ничего, что хотя бы отдаленно затрагивало дату - нет никаких вычислений или чего-либо еще в отношении этой даты.

Есть личто-то о @DateTimeFormat, о котором я должен знать?

Может ли что-то в Hibernate также быть ответственным за изменение даты?

Я также просматриваю свою базу данных для этого приложения.Я храню другую дату, которая называется creationDate, которая является фактической отметкой времени и отличается от ввода пользователя.В большинстве случаев даты совпадают, но клиент хотел иметь возможность установить его по-другому, для этого и нужен startDate.

Start Date              Creation Date (actual timestamp, not user input)
2011-04-17 19:00:00     2011-04-17 21:32:27
2011-04-18 19:00:00     2011-04-18 21:14:01
2011-04-20 19:00:00     2011-04-20 23:06:47
2011-04-26 19:00:00     2011-04-26 23:24:34
2011-04-28 19:00:00     2011-04-28 20:07:06
2011-05-01 19:00:00     2011-05-02 13:35:37
2011-06-21 19:00:00     2011-06-22 15:06:36
2011-07-28 19:00:00     2011-07-29 15:32:35
2011-09-03 19:00:00     2011-09-04 13:11:45
2011-10-11 19:00:00     2011-10-12 11:45:14
2011-10-11 19:00:00     2011-10-12 11:49:55
2011-10-18 19:00:00     2011-10-19 02:20:43

Сначала кажется, что это ошибка, запущенная в мае, но потом я понял, что дата верна, если она была более 19:00:00, и неактивна, если она меньше 19: 00: 00.

Я ненавижу Java: (

Проблема возникает, когда Spring создает указанную дату 10/19/2011 - кажется, что пользовательский ввод переводится в формат 2011-10-18 19:00:00.

Какое самое простое решение?

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Мне кажется очень вероятным, что это на самом деле вопрос часовых поясов.Date объект представляет мгновенное время - я подозреваю, что если вы посмотрите на точное значение, которое вы получили (например, в UTC, чтобы прояснить ситуацию), вы получите лучшее представление о том, чтопродолжается.Скорее всего, когда вы видите «18.10.2011», вы интерпретируете его в другом часовом поясе.

Если Spring поддерживает преобразование в типы Joda Time , я бы предложилиспользуя это вместо этого - тогда вы можете использовать LocalDate, что на самом деле означает означает дату вместо момента времени.

1 голос
/ 22 декабря 2014

Я обнаружил, что запуск вашей JVM с локальным часовым поясом, указанным в аргументах, решает эту проблему. Для меня это было просто добавление этой строки в конфигурацию запуска:

-Duser.timezone="Asia/Dhaka"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...