Java 日期时间差异

问题描述 投票:0回答:2

在编写集成测试时,我期望响应中出现硬编码的日期。

基本上我是硬编码的

expected date value '2020-11-10T00:00:00.000-05:00'
然后跑了
new GregorianCalendar(2020, 10, 10).getTime()

当我在本地放置并断言并运行它时,它会通过,但是当相同的代码被推送到bamboo构建服务器时,它生成的实际值是

'2020-11-10T00:00:00.000Z'
,所以我的测试失败了。

  1. 为什么同一个calendar.getTime生成两个不同的时间,是因为服务器机器配置为GMT吗?

  2. 我可以做些什么让它们同时出现或有其他解决方法吗?

注意:这里不能选择将其设置为字符串或比较没有时间的日期,因为我使用的是 Spring MockWebServiceServer,其中我必须对responseXML 进行硬编码并指定日期,类似于 Enum 中的内容。

 REQUESTAUTOMATESETTLEMENTWORKCASE("<aut:AutomateSettlementWorkcaseRequest xmlns:aut=\"http://www.abcd.com/abcd/workflow/services/workcase/model/AutomateSettlementWorkcase_1_0_0\">" +
          "  <aut:customerAccountId>5049903033584324</aut:customerAccountId>\n" +
          "  <aut:settlementDate>2020-11-10T00:00:00.000-05:00</aut:settlementDate>\n" +
          "  </aut:AutomateSettlementWorkcaseRequest>"),
java spring date time mocking
2个回答
3
投票

输入数据中的“-5”部分将其丢弃......理想情况下,您应该在构造日历时指定时区,然后将其设置为 UTC 凌晨 5 点(例如)。基本上,

2020-11-10T00:00:00.000-05:00
2020-11-10T05:00:00.000Z
是同一时刻。

现在,我们不知道保留 UTC 偏移量对您是否重要。如果是,您需要在日历中设置一个适当的时区 - 该时区与生成输入数据的规则相同。如果不是,我会使用 UTC 并适当设置时间。

我个人建议使用 Joda Time 而不是

Calendar
Date
- 这是一个更好更好的日期和时间 API。对于初学者来说,没有从 0 开始的月份:)


0
投票

避免遗留日期时间类

您正在使用有严重缺陷的日期时间类,这些类现在已经成为遗留的。它们被 JSR 310 中定义的现代 java.time 类取代。

java.time

您的输入字符串

2020-11-10T00:00:00.000-05:00
符合日期时间格式的ISO 8601标准。

将该字符串解析为

OffsetDateTime
对象。此类表示具有从特定偏移量看到的时间的日期。偏移量只是 UTC 时间子午线之前/之后的小时数、分钟数、秒数。 (时区是特定地区人民使用的偏移量的过去、现在和未来变化的命名历史,由其政治家确定。)

 OffsetDateTime odt = OffsetDateTime.parse( "2020-11-10T00:00:00.000-05:00" ) ;
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.