2013-10-13 41 views
0

如果我打電話DateTimeZone.forID("Europe/Ljubljana"),那麼我回到DateTimeZone爲什麼喬達DateTimeZone的名字不會返回我傳入的內容?

如果我再看看該對象的ID,它是"Europe/Belgrade"

我明白,這兩個地方可能在同一個時區,但如果用戶選擇了"Europe/Ljubljana",那麼我希望能夠將它傳回給他們,並且如果我將數據存儲爲DateTimeZone

有沒有辦法解決這個問題?

+0

嘗試使用getName()代替。 – BobTheBuilder

回答

1

在TZDB數據中,Europe/LjubljanaEurope/Belgrade的「鏈接」(或「別名」)。它不是一個獨特的區域。你可以在數據here中看到它。

Joda Time不會保留傳入的原始ID字符串,只要它解析爲特定的區域。如果你需要這個,那麼你必須將這個字符串保存在你自己的變量中。

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的DateTimeZonedtz.name獲得名

相關問題