如何从TimeZone String ID和Epoch实例化Joda DateTime

Dav*_*ams 7 java time timezone datetime jodatime

我正在看看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 );
    }

}
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的"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
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

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

DateTimeZone zone = DateTimeZone.forID("America/New_York");
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我不认为"epoch"对你的变量来说是一个好名字 - 它真的是"自Unix时代以来的秒数".另外,我不明白你为什么要除以1000 ... 相关的构造函数DateTime需要一个时区和自Unix纪元以来的毫秒 ...所以你可以System.currentTimeMillis()直接传递返回的值.