我需要添加時區信息到用戶維護位置的數據庫表。數據將主要從Java代碼訪問,但也有一些需要了解時區信息的PL/SQL和Win32(Delphi)代碼。如何在Windows(非Java)應用程序中使用Java時區ID?
使用java.util.TimeZone中的id似乎很簡單。 Java可以很容易地轉換是(明顯),休眠內置了對它的支持,顯然也是甲骨文理解這些時區的ID:
select TZ_OFFSET('Pacific/Marquesas') from dual.
的問題是:時區IDS似乎並沒有與Windows時區兼容D B。例如,java.util.timezone id「Pacific/Marquesas」(-09:30)不在Windows的時區選擇列表中。註冊局根本沒有包含它;見
\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
在這裏,我只能選擇-09:00或-10:00。因此,如果我要像這樣存儲時區,我如何能夠在Windows(無Java)中實現偏移量/ DST信息?希望這不需要映射表,我必須隨時更新映射表。是否有一個全球公認的標準比java時區標識更好?
更新
的時區信息是與數據庫DATE列組合使用。這些列包含本地日期/時間值。如果某個位置可以與這些值相關聯,則該位置的時區使我可以在需要時將日期/時間值轉換爲UTC或任何其他時區。
我意識到,而不是DATE TIMESTAMP_TZ數據類型或類似的東西會更合適。但是,這需要進行數據遷移(對於TZ,需要再次進行遷移),並且傳統應用程序也不支持這些應用程序(除非大量代碼發生更改)。如果我必須將值轉換爲UTC,問題幾乎相同。
底線是我需要在當地時間保持DATE值,但我需要知道其中一些TZ的含義。
也許你需要有一個不同的語言/語言環境的Windows像Marquesas是一個有效的選擇?毫無疑問,微軟不會像這樣在這個時區之間傳遞人們的信息...... – 2009-02-24 19:21:52
它似乎並沒有像這樣工作。我會說Windows總是擁有註冊表中的所有時區(至少支持它)。語言/語言環境無法充分確定時區 - 特別是在今天的移動計算中。 – 2009-02-25 10:25:24