0

我提供了一个毫秒数据1473080981L,它的日期应该是:September 5, 2016 9:50 PM. 我正在做单元测试,这是我第一次玩JUnit。到目前为止,我注意到的是,每次我打电话时:

DateTime dateTime = new DateTime();
dateTime.withMillis(1473080981L)

它仍然返回正确的日期,但目前,在撰写本文时,现在是晚上 10:00,此方法调用产生September 5, 2016 10:00 PM. DateTime不尊重我设置的时间。

这是正确的行为吗?有没有办法通过设置我自己预定义的选定日期时间来实例化 DateTime?

这是我的单元测试(请忍受它毫无意义,我正在学习单元测试):

String testDate = "September 5, 2016 9:50 PM"; // MMMM dd, yyyy K:mm a
String testDateResult1 = DateTimeFormatter.format(dateTime, DateTimeFormatter.FORMAT_DEFAULT_DATE_TIME_12);
String testDateResult2 = DateTimeFormatter.format(thisDay   , DateTimeFormatter.FORMAT_DEFAULT_DATE_TIME_12);

assertTrue(testDate.compareTo(testDateResult1) == 0);
assertTrue(testDate.compareTo(testDateResult2) == 0);

我的DateTimeFormatter看起来像这样:

public static String format(@NonNull DateTime dateTime, String validFormat) {
  org.joda.time.format.DateTimeFormatter dateTimeFormat = DateTimeFormat.forPattern(validFormat);
  return dateTimeFormat.print(dateTime);
}

public static String format(long dateToMillis, String validFormat) {
  org.joda.time.format.DateTimeFormatter dateTimeFormat = DateTimeFormat.forPattern(validFormat);

  DateTime dateTime = new DateTime();
  dateTime.withMillis(dateToMillis);

  return dateTimeFormat.print(dateTime);
}

谢谢!

4

1 回答 1

4

首先要注意的1473080981LSun Jan 18 1970 01:11:20UTC 时间。您可以在https://currentmillis.com/上查看

withMillis方法可能会返回一个新实例。改变:

dateTime.withMillis(dateToMillis);

到:

dateTime = dateTime.withMillis(dateToMillis);

或者干脆做:

dateTime = new DateTime(dateToMillis);

public DateTime withMillis(long newMillis)
以不同的毫秒 返回此日期时间的副本。返回的对象将是一个新实例或 this。只有毫秒会改变,年表和时区保持不变。

参数:newMillis - 新的毫秒,从 1970-01-01T00:00:00Z
返回:具有不同毫秒的此日期时间的副本

演示:

import org.joda.time.DateTime;

public class JodaTest {

  public static void main(String[] args) {
    DateTime dateTime = new DateTime();
    dateTime = dateTime.withMillis(1473069000000L);

    System.out.println(dateTime);
    System.out.println(new DateTime(1473069000000L));
  }
}

输出:

2016-09-05T11:50:00.000+02:00
2016-09-05T11:50:00.000+02:00
于 2016-09-05T14:27:27.240 回答