java - mockServer andExpect(content().XML 与当前日期连接

标签 java unit-testing timezone-offset localdate mockrestserviceserver

我收到断言错误“正文内容预期子项,但在断言 andExpect XML 时为空。如果我作为字符串输入“2020-10-01-5:00”,它工作正常,但如果我连接日期成一个字符串,如:

    LocalDate startDate = LocalDate.now().minusDays(90);
    String startDateLine =  "<start-date>" + startDate + "-5:00</start-date>\n";

它抛出断言错误。我在调用之前已验证 XML 是否正确,因此我不确定获取日期并转换为字符串会导致测试失败。

最佳答案

更新

请勿将偏移字符串添加到 LocalDate 字符串中以将其转换为 OffsetDateTime 字符串。下面所示是将 LocalDate 转换为 OffsetDateTime

的惯用方法
LocalDate.of(2020, 10, 1)
         .atStartOfDay()
         .atOffset(ZoneOffset.of("-05:00"));

演示:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class Main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2020, 10, 1);
        LocalDateTime ldt = date.atStartOfDay();
        OffsetDateTime odt = ldt.atOffset(ZoneOffset.of("-05:00"));
        System.out.println(odt);
    }
}

输出:

2020-10-01T00:00-05:00

ONLINE DEMO

您可以使用函数 OffsetDateTime#toString 获取 OffsetDateTimeString 表示形式例如

String strOdt = odt.toString();

原始答案

  1. 更改您的输入,使时区偏移量采用 HH:mm 格式,例如-05:00 使其符合 ISO 8601 standards .
  2. DateTimeFormatterBuilder.parseDefaulting(ChronoField.HOUR_OF_DAY, 0) 结合使用,将一天中的小时默认为 0。
  3. 将给定字符串解析为 OffsetDateTime,因为它具有时区偏移量,并且 OffsetDateTime 最适合表示具有时区偏移量的日期时间。

演示:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf =new DateTimeFormatterBuilder()
                                .appendPattern("u-M-d[H:m:s]XXX")
                                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
                                .toFormatter(Locale.ENGLISH);
        
        OffsetDateTime odt = OffsetDateTime.parse("2020-10-01-05:00", dtf);
        System.out.println(odt);
    }
}

输出:

2020-10-01T00:00-05:00

ONLINE DEMO

注意方括号内的可选模式。

了解有关 modern Date-Time API 的更多信息* 来自 Trail: Date Time

关于java - mockServer andExpect(content().XML 与当前日期连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68777420/

相关文章:

java - 项目构建错误: Non-resolvable parent POM for org. jboss.quickstarts.fuse :cxf-soap:6. 2.1.redhat-084

java - 记录器的使用,参数化更好还是使用 + 添加参数?

Python 从类中定义的不同文件调用方法

node.js - 时区或位置与 UTC 的偏移量

java - 打印 GMT+00 :00 in DateTimeFormatter

java - 在不使用渲染器的情况下在 JTable 中绘制单个单元格(或单个行)

java - CXF 的 JAXB 模式验证错误 - 发生 JAXBException : cvc-elt. 1:找不到元素的声明

c# - 无法确定类型为 'Npgsql.NpgsqlFactory' 的提供程序工厂的提供程序名称

unit-testing - 在 Elixir 中运行 Mix Test 时抑制 stderr

vbscript - 使用 VBScript 确定我的时区偏移量?