我正在查看 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()
返回的值。