ユーザーが管理する場所を含む db テーブルにタイムゾーン情報を追加する必要があります。データは主に Java コードからアクセスされますが、タイムゾーン情報を理解する必要がある PL/SQL および Win32 (Delphi) コードもあります。
java.util.TimeZone の id を使用するのは簡単に思えます。Javaはそれを(明らかに)簡単に変換できます。Hibernateには組み込みのサポートがあり、明らかにOracleもこれらのタイムゾーンIDを理解しています:
select TZ_OFFSET('Pacific/Marquesas') from dual.
問題は、タイムゾーン ID が Windows タイムゾーン DB と互換性がないように見えることです。たとえば、java.util.timezone id "Pacific/Marquesas" (-09:30) は Windows のタイムゾーン ピックリストにありません。レジストリにはまったく含まれていません。見る
\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
ここでは、-09:00 または -10:00 のいずれかのみを選択できます。では、このようにタイムゾーンを保存する場合、Windows (Java なし) で実際のオフセット/DST 情報を取得するにはどうすればよいでしょうか? うまくいけば、これが変更されるたびに最新の状態に保つ必要があるマッピング テーブルを必要としないことを願っています。JavaタイムゾーンIDよりもうまく機能する、世界的に受け入れられている標準はありますか?
アップデート
タイムゾーン情報は、データベースの DATE 列と組み合わせて使用されます。これらの列には、ローカルの日付/時刻の値が含まれています。場所をこれらの値に関連付けることができる場合、その場所のタイムゾーンにより、必要に応じて日付/時刻の値を UTC またはその他のタイムゾーンに変換できます。
DATE の代わりに TIMESTAMP_TZ データ型または類似のものの方が適切であることを認識しています。ただし、これにはデータの移行が必要になり (TZ が再度必要になります)、データで動作するレガシー アプリケーションではサポートされません (多くのコードが変更されない限り)。値を UTC に変換する必要がある場合、問題はほとんど同じです。
要するに、DATE の値を現地時間で保持する必要がありますが、その一部について、それがどの TZ を意味するかを知る必要があります。