java - Joda DateTime 无法通过毫秒正确设置日期

标签 java android jodatime android-jodatime

我提供的毫秒数据 1473080981L 日期应为:2016 年 9 月 5 日晚上 9:50。我正在做单元测试,这是我第一次使用 JUnit。到目前为止我注意到的是,每次我打电话时:

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

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

这是正确的行为吗?有没有办法通过设置我自己预定义的选定日期时间来实例化 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);
}

谢谢!

最佳答案

首先请注意,1473080981L 是 UTC 时间的 Sun 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)
Returns a copy of this datetime with different millis. The returned object will be either be a new instance or this. Only the millis will change, the chronology and time zone are kept.

Parameters: newMillis - the new millis, from 1970-01-01T00:00:00Z
Returns: a copy of this datetime with different 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

关于java - Joda DateTime 无法通过毫秒正确设置日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39332358/

相关文章:

java - 带有可选月份的日期时间段

java - 如何在 java 中获取两个日期之间的日期列表?如何包括/排除开始日期/结束日期?

java - Google App Engine : com. google.appengine.api.labs.modules.ModulesException:此实例没有有效的实例 ID

java - 通过 scala 处理深度优先迭代时出现 stackoverflowerror

java - Android 向上导航和操作栏中的按钮

android - 使用 Uri 或 Assets 中的文件创建 MediaPlayer 时出错

android - 如何更改 alertdialog 上的文本引力

java - 点击android上的随机7位数字

Java 控制台无法正确读取中文字符

java - 尝试编译 JODA time 2.1 源代码时出现异常