我正在查看 Joda Time 库。我想弄清楚如何在给定纪元时间戳和时区的情况下构造 DateTime 对象。我希望这能让我在那个时区找到那个时代的星期几、星期几等。但是我不确定如何将 DateTimeZone 传递给 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

最佳答案

要从 ID 获取时区,请使用 DateTimeZone.forID :

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

顺便说一句,我认为“纪元”不是您变量的好名字-它确实是“自 Unix 纪元以来的秒数”。此外,我不明白你为什么要除以 1000 ...... the relevant constructor for DateTime 需要一个时区和自 Unix 纪元以来的毫秒数......所以你可以直接传递从 System.currentTimeMillis() 返回的值。

10-06 11:01