Проблема с датой в Oracle с использованием JDBC

У меня такой сценарий: Два компьютера: Первый компьютер работает под управлением Windows Vista, второй компьютер работает под управлением Linux, оба подключаются к Oracle 10g. Oracle 10g работает на втором компьютере.

Я сделал одну тестовую программу на Java, которая подключается к Oracle с помощью ojdbc14.jar.

Эта тестовая программа только подключается к базе данных, извлекает некоторые данные из определенной таблицы и печатает значение поля даты.

При запуске теста программы на первой машине у меня дата вроде «01.10.1987». При запуске теста программы на первой секунде у меня дата «30.09.1987».

Когда я использую plsqldeveloper для отображения этих данных, поле даты выглядит как «01.10.1987».

Кто-нибудь может объяснить, почему?

заранее спасибо


person pwelti    schedule 14.07.2009    source источник


Ответы (3)


Для меня это похоже на проблему с часовым поясом - одна машина настроена, например, на время США, а другая - на GMT или UTC? Следовательно, даты отличаются друг от друга на один день, но, по-видимому, имеют одинаковое значение UTC/long.

Используете ли вы Timestamp в качестве типа столбца в Oracle? например.,;

...
"created" timestamp(6) not null default systimestamp enable,
...

Затем с помощью java.sql.Timestamp? например.:

...
Timestamp created = rs.getTimestamp("created");
...
person JeeBee    schedule 14.07.2009

Я думаю, что, возможно, Oracle хранит дату как значение по Гринвичу. То, что делает Oracle, правильно, но при чтении значения из базы данных Oracle ваш клиент должен настроить дату по Гринвичу. Похоже, что «plsqldeveloper» показывает вам скорректированное время по Гринвичу-7 при запросе из окна Windows и необработанное время по Гринвичу при запросе в поле Linux. Я бы сказал, что Linux-бокс (или plsqldeveloper в Linux-боксе) нуждается в дополнительной настройке для настройки GMT.

Кстати, если это на самом деле проблема с GMT, то она ДОЛЖНА также хранить время суток, ПОТОМУ ЧТО это единственный способ, при котором корректировка GMT-7 может оказаться на 1 целый день меньше. Итак, мне любопытно, какое время суток стоит на ваших датах. Кроме того, когда вы входите в инструмент администрирования Oracle и смотрите на дату там, насколько она отличается? (Если у вас нет Oracle, вы можете загрузить облегченную/экспресс-версию, и ее легко настроить)

person djangofan    schedule 14.07.2009

Не забудьте также проверить настройку NLS_DATE_FORMAT.

Это может быть настроено или установлено по умолчанию по-разному на ваших двух компьютерах.

См. этот URL для получения дополнительных примеров: http://www.dba-oracle.com/t_nls_date_format_sysdate.htm

person haytona    schedule 30.07.2009