我建议您从过时且容易出错的java.util.Date
切换到modern date-time API。
您的代码出了什么问题:
java.util.Date
认为第一个月为0
,这意味着7
代表August
。另外,它会将1900
添加到参数year
中,这意味着对于2020
作为此参数的值,它将为您提供一个年份设置为3920
的对象。我希望,这足以了解java.util.Date
的设计多么可怕。
使用现代的日期时间API:
您可以执行以下操作:
OffsetDateTime testData = OffsetDateTime.of(LocalDateTime.of(2020,Month.JULY,23,11,47,45,0),ZoneOffset.ofHours(-4));
assertEquals(testData,order.getCreatedAt());
这是基于order.getCreatedAt()
返回OffsetDateTime
对象的假设。请注意,您可以使用7
代替Month.JULY
,但后者是表示月份值的惯用方式。
如果order.getCreatedAt()
返回2020-07-23T11:47:45.000-04:00
作为String
,则可以将其解析为OffsetDateTime
,如下所示:
import java.time.LocalDateTime;
import java.time.Month;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
// Parse the given date-time string to OffsetDateTime
OffsetDateTime orderCreatedAt = OffsetDateTime.parse("2020-07-23T11:47:45.000-04:00");
// Create test data
OffsetDateTime testData = OffsetDateTime.of(LocalDateTime.of(2020,ZoneOffset.ofHours(-4));
// Display
System.out.println(orderCreatedAt);
System.out.println(testData);
// Assert
//assertEquals(testData,orderCreatedAt);
}
}
输出:
2020-07-23T11:47:45-04:00
2020-07-23T11:47:45-04:00
从 Trail: Date Time 了解更多有关现代日期时间API的信息。
本文链接:https://www.f2er.com/1826846.html