【问题标题】:Needing help trying to Format DateTime需要帮助尝试格式化日期时间
【发布时间】:2020-11-21 11:44:46
【问题描述】:

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

我的断言方法是这样的,下面的跟踪如下。要跟上文档的进度真的很困难。

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>

【问题讨论】:

  • 如果您只需要比较日期部分,则需要截断日期对象并获取时间部分
  • 请使用java.time.LocalDate停止使用java.util.Date,请

标签: java datetime junit shopify datetimeoffset


【解决方案1】:

我建议您从过时且容易出错的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:00String,则可以解析为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 的更多信息。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多