Joda DateTime 没有通过毫秒正确设置日期
Joda DateTime doesn't set date correctly via milliseconds
我正在提供毫秒数据 1473080981L
,其日期应为:September 5, 2016 9:50 PM
。我正在进行单元测试,这是我第一次使用 JUnit。到目前为止我注意到的是每次我打电话时:
DateTime dateTime = new DateTime();
dateTime.withMillis(1473080981L)
它仍然是 returns 正确的日期,但目前,在撰写本文时,现在是晚上 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);
}
谢谢!
首先请注意,1473080981L
在 UTC 时间中是 Sun Jan 18 1970 01:11:20
。您可以在 https://currentmillis.com/
查看
withMillis
方法可能 return 一个新实例。变化:
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
我正在提供毫秒数据 1473080981L
,其日期应为:September 5, 2016 9:50 PM
。我正在进行单元测试,这是我第一次使用 JUnit。到目前为止我注意到的是每次我打电话时:
DateTime dateTime = new DateTime();
dateTime.withMillis(1473080981L)
它仍然是 returns 正确的日期,但目前,在撰写本文时,现在是晚上 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);
}
谢谢!
首先请注意,1473080981L
在 UTC 时间中是 Sun Jan 18 1970 01:11:20
。您可以在 https://currentmillis.com/
withMillis
方法可能 return 一个新实例。变化:
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