Что происходит в том, что Клиент JDBC отправляет идентификатор часового пояса на Сервер. Сервер должен знать эту зону. Вы можете проверить с
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
У меня есть БД серверов, которые знают о 'Etc/UTC' и 'UTC' (tzfile версии 18), но другие знают только 'UTC' (TZ версии 11).
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
Существует также различное поведение на стороне клиента JDBC. Начиная с 11.2, драйвер отправляет идентификаторы зон, если он «известен» Oracle, тогда как перед этим он отправил временное смещение. Проблема с этой «отправкой известных идентификаторов» заключается в том, что клиент не проверяет, какая версия/содержимое временной зоны присутствует на сервере, но имеет свой собственный список.
Это объясняется в статье поддержки Oracle [ID 1068063.1].
Похоже, что это также зависит от операционной системы клиента, скорее всего, с Ubuntu с ошибкой Etc/UTC, чем с RHEL или Windows. Я предполагаю, что это связано с некоторой нормализацией, но я не понял, что именно.
Расскажите о своей среде, как вы управляете своей Java? –
Я запускаю приложение Java в командной строке. Windows 7 64bit, но Oracle DB работает на удаленном сервере Unix. – ndalama
попробуйте добавить «-Duser.timezone =» в вашу команду, не забудьте заменить на ваш GMT, т.е. -Duser.timezone = «+ 05:30» –