需要帮助尝试格式化DateTime

因此,对于我的分配,我被指示为Shopify集成创建单元测试。我的assert方法之一要求我以某种方式设置日期格式。

我的assert方法是这个,下面的跟踪如下。要跟上文档的步伐确实很困难。

assertEquals((new Date(2020,7,23)),order.getcreatedAt());

java.lang.AssertionError: expected:<Mon Aug 23 00:00:00 EDT 3920> but was:<2020-07-23T11:47:45.000-04:00>
iCMS 回答:需要帮助尝试格式化DateTime

我建议您从过时且容易出错的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

大家都在问