2014-06-05 3 views
-1

Я получу дату как Sat May 31 16:38:17 GMT 2014. В БД также столбец имеет такое же значение. Но когда я буду искать дату, например, Sat May 31 16:30:00 GMT 2014, она не будет искать. Но если я даю меньше 5:30 hours, как Sat May 31 11:00:00 GMT 2014. Он работает нормально.Календарь/Дата часовой пояс Резолюция

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-0:00")); 
cal.setTimeInMillis(inputDate.getTime()); 
cal.set(Calendar.MILLISECOND, 0); 
inputDate = cal.getTime(); 
+0

В какой часовой зоне используется база данных? – Dawnkeeper

+0

Когда я выполнил «select dbtimezone from dual», он дал «+00: 00» – user2902067

+0

Хорошо. Что именно вы делаете. Вставка в базу данных? Выбор из БД? И как (как в «примере кода»)? – Dawnkeeper

ответ

0

Основная реализация Date и Calendar как использовать ту же систему: а long представляющие миллисекунд с 1 января 1970 года, 0:00:00 GMT. См Here для Date (строк 136 & 168) и HERE для Calendar (строки 778)

Так что это заставляет нас это:

cal.setTimeInMillis(inputDate.getTime()); 
    // this gets the long from the Date and puts it into the Calendar 
    // nothing is changed, you only get added functionality 
    // even if you change the Timezone this only affects how it is displayed 

    cal.set(Calendar.MILLISECOND, 0); 
    // the long is modified by setting the that represents only milliseconds to zero 

    inputDate = cal.getTime(); 
    //the long is stored in a Date and returned 

Вы получаете назад минимально измененную Date объекта. Без второй инструкции не было бы никаких изменений вообще.

Это объясняет, почему ничего не преобразуется, но не почему выбор не работает.

Из информации, которую вы дали, кажется, что существует несоответствие в тайм-словах троицы БД, JVM и вашей системы.

Что-то в этом роде: ваша система настроена на IST, и ваша JVM каким-то образом интерпретирует ваше системное время как GMT. Чтобы проверить это, вы можете запустить System.out.println(new Date()). Если он записывает часовой пояс в формате GTM, но цифры совпадают с вашими системными часами (IST), то это ваша проблема.

Вы также можете проверить:

  • делает временные штампы спички заявления вставки с тем, что поступает в базе данных
  • делать временные штампов записи базы данных соответствия, который вы получите после того, выберите
Смежные вопросы