如果我拨打DateTimeZone.forID("Europe/Ljubljana")
,我就会回复DateTimeZone
。
如果我然后查看该对象的ID,那就是"Europe/Belgrade"
。
我很欣赏这两个地方可能位于同一时区,但如果用户选择"Europe/Ljubljana"
,那么我希望能够将其传回给他们,如果我存储数据则会丢失作为DateTimeZone
。
有办法吗?
答案 0 :(得分:1)
在TZDB数据中,Europe/Ljubljana
是Europe/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的DateTimeZone
和dtz.name
来获取姓名