Joda-Time奇怪的时刻

vli*_*o20 0 java date jodatime

我正在尝试使用12:00的小时初始化Joda-Time DateTime对象,这是我如何做到这一点:

public static final long MINUTE         = 60 * 1000;
public static final long HOUR           = 60 * MINUTE; 

DateTime defaultDate = new DateTime(HOUR * 12);
System.out.print("the hour is: " + defaultDate.getHourOfDay()) // getting 14
Run Code Online (Sandbox Code Playgroud)

为什么我得到14而不是12?也许妈妈没教我怎么读时钟吧?!

Jon*_*eet 6

你指定自Unix时代以来的数毫秒,即UTC的午夜.

但是,您隐式使用了系统默认时区DateTime,我怀疑在Unix时代,您的系统时区是UTC + 2.

如果要使用特定时区,可以在构造函数中传递:

DateTime defaultDate = new DateTime(HOUR * 12, DateTimeZone.UTC);
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用DateTimeConstants.MILLIS_PER_HOUR或使用java.util.concurrent.TimeUnit转换,而不是使用自己的常量.

  • @VladIoffe:做什么*到底是什么?我怀疑你没有想到你正在创造什么类型的物体.如果你想在当地时区1970年1月1日上午12点,我建议你先创建一个`LocalDateTime`. (4认同)