2013-03-29 75 views
6

我正在查看Joda Time庫。我想弄清楚如何構造一個DateTime對象給定一個紀元時間戳和一個時區。我希望能讓我在那個時區找到那個時代的星期幾,日子等等。但是我不確定如何將DateTimeZone傳遞給DateTime構造函數。如何從TimeZone字符串ID和Epoch實例化Joda DateTime

import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 
import org.joda.time.Instant; 

public class TimeZoneTest { 

    public static void main (String[] args) { 

     long epoch = System.currentTimeMillis()/1000; 

     DateTimeZone tz = new DateTimeZone("America/New_York"); 

     DateTime dt = new DateTime(epoch, tz); 

     System.out.println(dt); 
    } 

} 

我試過上面的「America/New_York」的硬編碼的例子,但是從編譯器得到了這個。我究竟做錯了什麼?

$ javac -cp "joda-time-2.2.jar:." TimeZoneTest.java 
    TimeZoneTest.java:12: org.joda.time.DateTimeZone is abstract; cannot be instantiated 
    DateTimeZone tz = new DateTimeZone("America/New_York"); 
        ^
    1 error 

回答

10

要從ID獲取一個時區,使用DateTimeZone.forID

DateTimeZone zone = DateTimeZone.forID("America/New_York"); 

順便說一句,我不認爲「時代」是你變一個好聽的名字 - 這是真的「自Unix紀元以來的秒「。此外,我不明白你爲什麼要除以1000 ... the relevant constructor for DateTime需要一個時區和毫秒自Unix時代以來...所以你可以直接傳遞從System.currentTimeMillis()返回的值。

+0

輝煌,感謝您的答覆,完美的作品,並指出我在正確的方向(即更徹底地閱讀文檔:)。 –

相關問題