为什么乔达日期时区名称不返回我传入的内容



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

如果我然后查看该对象的 ID,则"Europe/Belgrade" .

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

有没有办法解决这个问题?

在 TZDB 数据中,Europe/Ljubljana 是指向Europe/Belgrade的"链接"(或"别名")。 它本身不是一个独特的区域。 你可以在这里的数据中看到它。

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

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

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来获取乔达的DateTimeZonedtz.name来获取名字

相关内容

  • 没有找到相关文章