我正在查看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
答案 0 :(得分:11)
要从ID获取时区,请使用DateTimeZone.forID
:
DateTimeZone zone = DateTimeZone.forID("America/New_York");
顺便说一句,我不认为“epoch”是你变量的好名字 - 它真的是“自Unix时代以来的秒数”。另外,我不明白为什么你要除以1000 ... the relevant constructor for DateTime
需要一个时区和毫秒自Unix纪元...所以你可以传递返回的值来自System.currentTimeMillis()
直接。