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

时间:2013-03-29 20:34:39

标签: java datetime time timezone 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 );
    }

}

我尝试了上面的“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

1 个答案:

答案 0 :(得分:11)

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

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

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