Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助尝试格式化DateTime吗_Java_Datetime_Junit_Shopify_Datetimeoffset - Fatal编程技术网

Java 需要帮助尝试格式化DateTime吗

Java 需要帮助尝试格式化DateTime吗,java,datetime,junit,shopify,datetimeoffset,Java,Datetime,Junit,Shopify,Datetimeoffset,因此,对于我的任务,我被指示为Shopify集成创建单元测试。我的一个断言方法要求我以某种方式格式化日期 我的assert方法是this,下面的跟踪如下。要跟上纪录片的节奏真的很困难 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

因此,对于我的任务,我被指示为Shopify集成创建单元测试。我的一个断言方法要求我以某种方式格式化日期

我的assert方法是this,下面的跟踪如下。要跟上纪录片的节奏真的很困难

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>
assertEquals((新日期(2020年7月23日)),order.getCreatedAt();
java.lang.AssertionError:应为:但为:

我建议您从过时且容易出错的
java.util.Date
切换到

您的代码出了什么问题:
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

了解有关现代日期时间API的更多信息如果只需要比较日期部分请使用
java.time.LocalDate
并停止使用
java.util.date
,则需要截断日期对象并获得时间部分