我希望以下解釋能夠有意義,因爲這是一個我們正面臨並且難以描述的奇怪問題。hudson或jodatime的偶爾日期或時區差異
我們有一個maven項目,它在哈德森建立,幷包含一些單元測試日期使用和聲明。哈德遜服務器在solaris上運行。現在,偶爾(如30%的時間)使用日期進行單元測試失敗,因爲在單元測試中從指定的時間中扣除3,5小時,因此斷定啓動失敗。其他70%一切正常,儘管代碼中沒有任何變化,我們每小時運行hudson幾次。
我下面的代碼添加到一個單元測試來檢查時間:
@Test
public void testDate() {
System.out.println("new DateMidnight(2011, 1, 5).toDate();");
System.out.println(new DateMidnight(2011, 1, 5).toDate());
System.out.println(new DateMidnight(2011, 1, 5).toDate().getTime());
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2011);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 5);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println("cal.getTime();");
System.out.println(cal.getTime());
System.out.println(cal.getTime().getTime());
}
所以基本上應該使用jodatime或普通的舊日曆打印時,同樣的事情。 70%的運行情況就是如此;對於其他30%我獲得以下的打印輸出:
Running TestSuite
new DateMidnight(2011, 1, 5).toDate();
Tue Jan 04 21:30:00 MET 2011
1294173000000
cal.getTime();
Wed Jan 05 12:00:00 MET 2011
1294225200000
因此,日曆保持正確的日期和時間,但jodatime扣除3.5個小時。
本地maven測試永遠不會出現這個問題,我們無法弄清楚它可能是什麼原因。特別是,我們不能想到測試有時會通過的一個單一原因,有時會在不更改任何代碼或哈德森或服務器設置的情況下失敗。
另外,我們用cobertura運行maven install,這意味着單元測試運行兩次。它也發生了,他們第一次通過,第二次失敗或者其他方式失敗,或者兩次失敗。
感謝您的任何解決方案或提示,以追查原因,
斯泰恩