Joda DateTime不会通过毫秒正确设置日期

时间:2016-09-05 14:05:26

标签: java android jodatime android-jodatime

我提供的毫秒数据1473080981L应该是:September 5, 2016 9:50 PM。我正在进行单元测试,这是我第一次玩 JUnit 。到目前为止我注意到的是每次打电话都是这样的:

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

它仍然会返回正确的日期,但目前,在撰写本文时,现在是晚上10:00 PM,此方法调用会生成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);
}

谢谢!

1 个答案:

答案 0 :(得分:4)

首先请注意,UTC时间1473080981LSun Jan 18 1970 01:11:20。您可以在https://currentmillis.com/

查看

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

dateTime.withMillis(dateToMillis);

为:

dateTime = dateTime.withMillis(dateToMillis);

或只是做:

dateTime = new DateTime(dateToMillis);
  

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

     

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

演示:

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