【问题标题】:Why do Joda DateTimeZone names not return what I pass in?为什么 Joda DateTimeZone 名称不返回我传入的内容?
【发布时间】:2013-10-13 13:14:48
【问题描述】:

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

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

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

有办法解决吗?

【问题讨论】:

  • 尝试使用 getName() 代替。

标签: java timezone jodatime


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    解决方法:
    你可以使用这个辅助类:

    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 的DateTimeZone,并使用dtz.name 获取名称

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 2016-11-26
      • 1970-01-01
      • 2023-03-12
      • 2019-09-23
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      相关资源
      最近更新 更多