如果我打电话给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
来获取乔达的DateTimeZone
,dtz.name
来获取名字