为什么Joda DateTimeZone名称不会返回我传入的内容?

时间:2013-10-13 13:14:49

标签: java timezone jodatime

如果我拨打DateTimeZone.forID("Europe/Ljubljana"),我就会回复DateTimeZone

如果我然后查看该对象的ID,那就是"Europe/Belgrade"

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

有办法吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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的DateTimeZonedtz.name来获取姓名