如果我打电话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
来获取 joda'sDateTimeZone
和dtz.name
获取名称