如果我打電話DateTimeZone.forID("Europe/Ljubljana")
,那麼我回到DateTimeZone
。爲什麼喬達DateTimeZone的名字不會返回我傳入的內容?
如果我再看看該對象的ID,它是"Europe/Belgrade"
。
我明白,這兩個地方可能在同一個時區,但如果用戶選擇了"Europe/Ljubljana"
,那麼我希望能夠將它傳回給他們,並且如果我將數據存儲爲DateTimeZone
。
有沒有辦法解決這個問題?
如果我打電話DateTimeZone.forID("Europe/Ljubljana")
,那麼我回到DateTimeZone
。爲什麼喬達DateTimeZone的名字不會返回我傳入的內容?
如果我再看看該對象的ID,它是"Europe/Belgrade"
。
我明白,這兩個地方可能在同一個時區,但如果用戶選擇了"Europe/Ljubljana"
,那麼我希望能夠將它傳回給他們,並且如果我將數據存儲爲DateTimeZone
。
有沒有辦法解決這個問題?
在TZDB數據中,Europe/Ljubljana
是Europe/Belgrade
的「鏈接」(或「別名」)。它不是一個獨特的區域。你可以在數據here中看到它。
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的DateTimeZone
和dtz.name
獲得名
嘗試使用getName()代替。 – BobTheBuilder