Основная реализация 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), то это ваша проблема.
Вы также можете проверить:
- делает временные штампы спички заявления вставки с тем, что поступает в базе данных
- делать временные штампов записи базы данных соответствия, который вы получите после того, выберите
В какой часовой зоне используется база данных? – Dawnkeeper
Когда я выполнил «select dbtimezone from dual», он дал «+00: 00» – user2902067
Хорошо. Что именно вы делаете. Вставка в базу данных? Выбор из БД? И как (как в «примере кода»)? – Dawnkeeper