5

我正在使用 JodaTime 在 Java 应用程序中处理时区。尝试从 java 时区的 id 构建 DateTimeZone (JodaTime) 对象时遇到问题。乔达扔了一个

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

对于以下时区列表:

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

这些时区是做什么用的?它们与非程序员有关吗?为一般用途设计的应用程序是否应该支持这些时区?

谢谢。

4

3 回答 3

4

SystemV 时区 ID 已过时且已弃用。但是,您可以通过重新编译包含 systemv 时区数据文件的 joda-time jar 文件来使 Joda-Time 理解它们。请参阅systemv 数据文件中注释掉的行。(即取消注释这些行并重建 jar 文件)。

于 2012-05-22T07:48:31.357 回答
3

我会将其添加为新帖子,因为它提供了我的问题的答案。SystemV 时区用于旧的 UNIX 操作系统,你猜对了,它被命名为 UNIX SYSTEM V。在与我的团队讨论后,我们决定它们对非程序员甚至现在的程序员都不重要。所以我们决定不在我们的应用程序中使用它们。

关于 SystemV 时区的一些参考资料:

于 2012-05-22T06:52:44.723 回答
1

您可以使用 DateTimeZone#forTimeZone 方法简单地将 java TimeZone 转换为 DateTimeZone

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);
于 2012-05-21T13:48:05.960 回答