2012-10-06 292 views
1

在编写集成测试时,我期待着响应中的硬编码日期。Java日期时间差异

基本上我硬编码expected date value '2020-11-10T00:00:00.000-05:00'new GregorianCalendar(2020, 10, 10).getTime()

当我把和断言和本地运行它通过,但是当同样的代码被推到竹构建服务器时,它产生的actualValue是'2020-11-10T00:00:00.000Z'所以我的测试失败。

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

  2. 我可以做些什么让他们在同一时间或任何其他解决方法?

注意:使这串或没有时间与日期是不是一种选择这里,因为我使用Spring MockWebServiceServer,凡在我必须硬编码的responseXML并指定日期,在枚举这样的事情。

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>"), 

回答

3

在输入数据的“-5”部分被扔掉...最好你应该构建日历时指定的时间段,然后将其设置为凌晨5点UTC(例如)。基本上,2020-11-10T00:00:00.000-05:002020-11-10T05:00:00.000Z是同一瞬间。

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

我个人推荐使用的Joda Time代替CalendarDate虽然 - 这是一个更好的日期和时间API。没有0为基础的月份,对于初学者:)

+0

我很乐意使用乔达时间,但它不适合我在我的工作场所。获得11月也不是我的担忧(那是我期待的日期)。我只是想知道**为什么当calender.getTime()运行在构建服务器上时,它会产生尾随Z **,但在本地机器上运行-05:00。我也尝试将时区设置为UTC,但它仍然在服务器中跟随Z. 'GregorianCalendar cal = new GregorianCalendar(2020,10,10); TimeZone tz = TimeZone.getTimeZone(“UTC”); cal.setTimeZone(tz);' –

+1

@Himalay:尾部Z表示UTC。您应该计算出您想要使用的时区,并明确设置它。将编辑关于11月份的部分 - 我误解了你的测试用例。 –

+0

正如你在上面我的评论中看到的那样,我明确地将TimeZone设置为UTC,但是它不会在我的本地机器中产生尾随的Z,而只会在服务器中产生?感谢您的回复 –