【问题标题】: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.
有办法解决吗?
【问题讨论】:
标签:
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 获取名称