0

如果我打电话DateTimeZone.forID("Europe/Ljubljana"),那么我会得到一个DateTimeZone.

如果我再查看该对象的 ID,它是"Europe/Belgrade".

我很欣赏这两个地方很可能在同一个时区,但是如果用户选择了,"Europe/Ljubljana"那么我希望能够将其传回给他们,如果我将数据存储为DateTimeZone.

有办法解决吗?

4

2 回答 2

1

在 TZDB 数据中,Europe/Ljubljana是一个“链接”(或“别名”)到Europe/Belgrade. 它不是一个独立的区域。您可以在此处的数据中看到它。

Joda Time 在将其解析为特定区域后不会保留传入的原始 ID 字符串。如果您需要,那么您必须将该字符串保存在您自己的单独变量中。

于 2013-10-13T17:54:14.383 回答
1

解决方法:
您可以使用此辅助类:

public final class DateTimeZoneExtended
{
   public final DateTimeZone dateTimeZone;
   public final String tzName;

   private DateTimeZoneExtended(String id, DateTimeZone zone)
   {
      tzName = id;
      dateTimeZone = zone;
   }

   public static DateTimeZoneExtended forID(String id)
   {
      return new DateTimeZoneExtended(id, DateTimeZone.forID(id));
   }
}  

用法:

DateTimeZoneExtended dtz = DateTimeZoneExtended.forID("Europe/Ljubljana");

现在您可以使用dtz.dateTimeZone来获取 joda'sDateTimeZonedtz.name获取名称

于 2013-10-13T18:07:02.423 回答