Как использовать идентификатор часового пояса Java в приложении Windows (не Java)? - PullRequest
4 голосов
/ 24 февраля 2009

Мне нужно добавить информацию о часовом поясе в таблицу базы данных с указанием местоположений, поддерживаемых пользователем Доступ к данным будет в основном из кода Java, но также есть код PL / SQL и Win32 (Delphi), который должен понимать информацию о часовом поясе.

Кажется, прямо использовать идентификатор из java.util.TimeZone. Java может легко конвертировать это (очевидно), Hibernate имеет встроенную поддержку для него, и, очевидно, Oracle также понимает эти идентификаторы часовых поясов:

select TZ_OFFSET('Pacific/Marquesas') from dual.

Проблема в том, что идентификаторы часовых поясов несовместимы с БД часовых поясов Windows. Например, идентификатор java.util.timezone "Pacific / Marquesas" (-09: 30) отсутствует в списке выбора часовых поясов в Windows. Реестр не содержит его вообще; см

\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

Здесь я могу выбрать только -09: 00 или -10: 00. Итак, если бы я должен был хранить часовой пояс, как это, как я могу получить фактическую информацию о смещении / DST в Windows (без Java)? Надеюсь, для этого не требуется таблица сопоставления, которую я должен обновлять всякий раз, когда она меняется. Существует ли общепринятый стандарт, который работает лучше, чем идентификатор часового пояса Java?

Обновление

Информация о часовом поясе используется в сочетании со столбцами DATE в базе данных. Эти столбцы содержат локальные значения даты / времени. Если местоположение может быть связано с этими значениями, часовой пояс местоположения позволяет мне при необходимости конвертировать значение даты / времени в UTC или любой другой часовой пояс.

Я понимаю, что вместо DATE более подходящим будет тип данных TIMESTAMP_TZ или что-то подобное. Однако это потребует переноса данных (для которого снова требуется TZ) и не поддерживается устаревшими приложениями, которые также работают с данными (если не изменен большой объем кода). Проблема почти такая же, если бы мне пришлось конвертировать значения в UTC.

Суть в том, что мне нужно хранить значения DATE по местному времени, но для некоторых из них мне нужно знать, что означает TZ.

Ответы [ 2 ]

7 голосов
/ 24 февраля 2009

Я могу дать немного фона, если не реальный ответ.

Многие системы используют реализацию часовых поясов Olson . Таким образом, эти имена работают во многих системах (большинство Unix, Java, Oracle, я думаю). Microsoft делает свое дело.

Я вижу внизу той ссылки на Википедию, где есть ссылка на какое-то сопоставление с миром Windows.

Удачи!

2 голосов
/ 24 февраля 2009

Я понимаю, что это не лучший способ сделать это, но этого может быть достаточно в вашем случае. Не зная всех требований, я не могу сказать.

Для чего вам нужна информация о часовом поясе? Просто для того, чтобы указать правильное смещение времени и, возможно, название часового пояса?

Вы можете продолжить использовать Java для определения смещения пользователя, просмотрев выбранный часовой пояс пользователя с помощью Java. Каждый раз, когда пользователь регистрирует запись в вашей базе данных, каково смещение в настоящее время. Затем другие приложения могут просмотреть эту информацию, чтобы определить, как форматировать время.

Это предполагает, что пользователи, которые регулярно входят в систему, - это те, для которых это нужно сделать. Если это не так, вы можете запустить ежедневное задание, чтобы найти часовой пояс для каждого пользователя в Java и записать смещение, действующее в настоящее время.

Хакиш, согласился, но единственный другой способ, который я вижу, - это составить карту. И что происходит, когда кто-то выбирает часовой пояс, для которого у вас нет сопоставления?

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