我建议您从过时且容易出错的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, Month.JULY, 23, 11, 47, 45, 0),
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 的更多信息。