2012-10-06 332 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,而只會在服務器中產生?感謝您的回覆 –