Как бы вы представили дату рождения в своей java-модели?

И подождите, не спешите отвечать «java.util.Date», рассмотрите следующий сценарий.

Объект Person, имеющий 2 поля: «birthday» и «nextMeeting» оба java.util.Date. Теперь день рождения хранится в базе данных как столбец типа даты (без времени), например. 01-10-1979 и nextMeeting как тип datetime, например. 01-10-2010 20:00:00.

Вы извлекаете его из базы данных, "день рождения" будет автоматически установлен на полночь JDBC. Теперь вам нужно отправить этот объект в другую JVM, используя, скажем, RMI или другую технологию.

На другом конце JVM имеет часовой пояс -1 час от исходной JVM. Здесь начинается проблема. nextMeeting станет 01-10-2010 19:00:00, что абсолютно ХОРОШО и ПРАВИЛЬНО с точки зрения пользователя и т.д.

НО день рождения станет 30-09-1979 23:00:00, который будет представлен пользователю как 30-е число Сентябрь, а это совсем не то, что мы хотим, потому что день рождения, очевидно, статичен и НЕ зависит от часовых поясов.

Значит, тип столбца в БД выбран правильно (дата). Этот тип столбца обычно представлен как java.util.Date. Но в нашем случае это неправильный тип java.

Так как бы вы представили день рождения? Учтите, что вам необходимо управлять этим объектом в пользовательском интерфейсе, как в компоненте datepicker и т. Д.

7
задан oddparity 20 August 2013 в 11:26
поделиться