Как установить часовой пояс по умолчанию в Java и контролировать способ хранения даты в БД? - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть следующая проблема, которая появилась, когда я установил войну моего веб-приложения на виртуальный сервер Linux. Вот оно: системное время моего сервера кажется правильным, фактически ввод даты на оболочке:

Mon Apr 11 11:47:30 CEST 2011

которое является моим "временем настенных часов". Даже MySQL работает нормально, если я выберу сейчас (), я получу:

mysql> select now()
    -> ;
+---------------------+
| now()               |
+---------------------+
| 2011-04-11 11:52:57 |
+---------------------+
1 row in set (0.01 sec)

Но мое приложение (Spring + hibernate на Java6 + tomcat 6) будет сохранять каждую дату в БД с часовым поясом по Гринвичу (и время корректно компенсируется разницей с GMT, что хорошо). Теперь проблема в том, что я получаю все даты, отображаемые с GMT, даже если я делаю:

static final DateFormat format = new SimpleDateFormat(
            "dd/MM/yyyy 'alle' HH:mm", Locale.ITALY);

Я не получаю правильное смещение часов, но они остаются в GMT, и они показывают GMT, если я добавлю Z (который отображает часовой пояс) в шаблон.

В Windows вместо этого у меня были значения даты, сохраненные в моем родном часовом поясе на mySQL. Так что на моей машине Windows, где я разрабатываю, у меня будут все даты в CEST. Это раздражает, так как я не знаю, как предсказать поведение системы, и мне приходится делать скучные тесты и выяснять, как это изменить.

Вы когда-нибудь видели эту проблему? Как с этим бороться?

Ответы [ 4 ]

2 голосов
/ 11 апреля 2011

DateFormat поддерживает понятие часового пояса.Добавить что-то вроде:

format.setTimeZone(TimeZone.getTimeZone("Europe/Rome");
1 голос
/ 11 апреля 2011
  SimpleDateFormat sf1 = new SimpleDateFormat("dd/MM/yyyy 'alle' HH:mm:ss");
        sf1.setTimeZone(TimeZone.getTimeZone("Europe/Rome"));
        System.out.println(sf1.format(new Date()));

// List all Timezone
        System.out.println(Arrays.asList(TimeZone.getDefault()));
1 голос
/ 11 апреля 2011

DateFormat не заботится о часовых поясах, только форматирование.Чтобы перейти на часовой пояс, вам нужно что-то вроде Calendar.setTimezone () .

0 голосов
/ 30 января 2013

PreparedStatement st = con .prepareStatement ("вставить в knjiga_osisi (rb_knjiz, Inv_br, Naziv_os, datum_k, rb_pk, opis, ulaz, izlaz, stanje, osnovica_zam, otpis, sadasnjav, rašnos), orvosd (orvost), STR_TO_DATE (?, '% D-% m-% Y'),?,?,?,?,?,?,?,?,?,?) ");

Это код дляДжава.Mysql - Java европейский формат даты

Эта строка для даты

STR_TO_DATE (?, '% d-% m-% Y')

U может тестировать только в MySQLстрока даты:

SELECT ID, DATE_FORMAT (Дата, '% d-% M-% Y') ОТ таблицы1;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...