2012-05-21 76 views
3

我正在使用JodaTime在Java應用程序中使用時區。嘗試從java時區的id生成DateTimeZone(JodaTime)對象時遇到問題。喬達拋出一個Java SystemV時區和JodaTime

java.lang.IllegalArgumentException: The datetime zone id 'SystemV/HST10' is not recognised 

對時區的如下因素列表:

  • SystemV/HST10
  • SystemV/YST9
  • SystemV/YST9YDT
  • SystemV/PST8
  • SystemV/PST8PDT
  • SystemV/MST7
  • SystemV/MST7MDT
  • SystemV/CST6
  • SystemV/CST6CDT
  • SystemV/EST5
  • SystemV/EST5EDT
  • SystemV/AST4
  • SystemV/AST4ADT

這些是什麼時區用於?它們與非程序員有關嗎?設計用於一般用途的應用程序是否應該支持這些時區?

謝謝。

+0

你從哪裏得到這個區域的ID? – Ilya

+0

這是java.util.TimeZone.getAvailableIDs()返回的內容。 – sebi

回答

1

的SystemV時區ID是過時且不適用。但是,您可以通過re-compiling joda-time jar文件將Joda-Time理解爲包含systemv時區數據文件。請參閱systemv數據文件中的commented out行。 (即取消註釋行並重建jar文件)。

+0

請檢查這[問題](http://stackoverflow.com/questions/12606502/exception-while-trying-to-recompile-joda-time-2-1-source)。 – Emil

1

可以java的時區簡單地轉換爲DateTimeZone,使用方法DateTimeZone#forTimeZone

TimeZone tz = //... 
DateTimeZone dtz = DateTimeZone.forTimeZone(tz); 

一些本區域的可沒有 「SystemV/

解析所以你可以使用

String tzId = "SystemV/MST7MDT"; 
DateTimeZone tz = DateTimeZone.forID(tzId.replaceAll("SystemV/", "")); 

你也可以下一個

TimeZone tz = TimeZone.getTimeZone("SystemV/MST7MDT"); 
DateTimeZone jodaTz = DateTimeZone.forTimeZone(tz); 
+0

是的,解析它們確實有效。謝謝。 – sebi

1

我會將此添加爲新帖,因爲它提供了我的問題的答案。 SystemV時區用在一箇舊的UNIX操作系統中,它被命名爲UNIX SYSTEM V。在與我的團隊討論後,我們認爲它們對於非編程人員甚至現在的程序員都沒有任何重要性。所以我們決定不在應用程序中使用它們。

關於SystemV時區的一些參考文獻: