Java / Servlet: получить текущий sql.Date - PullRequest
7 голосов
/ 06 мая 2009

Что мне нужно сделать, это:

1) Получить языковой стандарт пользователя из запроса.

2) Создать новый объект sql.Date с текущей датой и временем в зависимости от локали пользователя

3) Запишите его в БД MySQL, тип столбца: TIMESTAMP

Что я получил:

java.util.Locale locale = request.getLocale();

java.text.DateFormat dateFormat =
java.text.DateFormat.getDateTimeInstance(
                        java.text.DateFormat.LONG, java.text.DateFormat.LONG, locale );

java.util.Date date = new java.util.Date();

java.sql.Date sqlDate = new java.sql.Date( date.getTime() );

Дата в порядке, но есть проблема со временем - всегда 12:00:00.

Есть предложения? Есть ли более эффективный способ сделать это?

Ответы [ 5 ]

17 голосов
/ 22 марта 2013

Еще более компактное решение;)

java.sql.Date timeNow = new Date(Calendar.getInstance().getTimeInMillis());
9 голосов
/ 22 декабря 2011

Есть еще одно простое решение для этого. используйте этот код для получения текущей даты, используя java.util.Date

java.util.Calendar cal = java.util.Calendar.getInstance();
java.util.Date utilDate = cal.getTime();
java.sql.Date sqlDate = new Date(utilDate.getTime());
4 голосов
/ 06 мая 2009

Если вам нужно время, вам нужна java.sql.Timestamp, а не java.sql.Date и столбец отметки времени в базе данных.

0 голосов
/ 06 мая 2009

Получение часового пояса на основе локали может не совпадать с фактическим часовым поясом .

Пример: здесь, в Австралии, языковой стандарт - en-AU, но у нас есть несколько часовых поясов с разницей до 3 часов.

Я думаю, в США у них тоже есть эта проблема.

Возможное решение - хранить время UTC . Если пользователь затем настраивает свой часовой пояс, скажем, в своих предпочтениях, или вы используете какой-то другой способ передачи часового пояса (информация о клиенте / браузере, скажем, через AJAX), тогда вы можете отрегулировать время UTC, основываясь на этом, используя экземпляр java.util.Calendar .

0 голосов
/ 06 мая 2009

Обратите внимание, что request.getLocale использует значение заголовка Accept-Language и не всегда может дать вам правильную локаль.

...