2012-07-27 178 views
3

以下Java測試在美國託管構建服務器上傳遞。它也傳遞給非美國的服務器,例如在德國。它在愛爾蘭運行的本地服務器上失敗。以下代碼說明失敗的測試。日期格式問題

org.junit.ComparisonFailure: expected:<[4/6/09 11:30 AM]> but was:<[06/04/09 11:30]> 

有沒有我可以提供的系統設置讓這些測試在本地通過?

public void testFormattedDate() { 
// Set the default time zone in case this unit test is executed in a different country 
TimeZone.setDefault(TimeZone.getTimeZone(DateUtil.DEFAULT_TIMEZONE)); 
final Date utilDate = new Date(); 
utilDate.setDate(6); 
utilDate.setHours(11); 
utilDate.setMinutes(30); 
utilDate.setMonth(3); 
utilDate.setSeconds(45); 
utilDate.setYear(109); 

SimpleDateFormat dateFormatter = new SimpleDateFormat();   
final String formattedOutput = dateFormatter.format(utilDate); 

Assert.assertEquals("4/6/09 11:30 AM", formattedOutput); 
} 
+1

呃......你在測試什麼?沒有你的代碼在這裏測試。此測試僅用於驗證Java類的工作方式嗎? – 2012-07-27 08:25:05

+0

Assert.assertEquals(「2009年4月6日上午11:30」,formattedOutput); ..... – Damo 2012-07-27 09:04:32

+0

爲了便於閱讀,測試中的代碼只是內聯的。這些行代表測試中的代碼:SimpleDateFormat dateFormatter = new SimpleDateFormat(); final String formattedOutput = dateFormatter.format(utilDate); – Damo 2012-07-27 09:05:35

回答

4

必須嘗試提供一個模式到SimpleDateFormat

SimpleDateFormat dateFormatter = new SimpleDateFormat("d/M/yy HH:mm a");

+0

這將通過測試通過是。我寧願不必更改代碼或測試。這個測試適用於我在德國的開發人員以及美國。 – Damo 2012-07-27 09:03:08

+0

您應該可以使用以下設置JVM local:'-Duser.language = xz -Duser.country = XZ',如http://stackoverflow.com/questions/64038/setting-java-locale-settings – 2012-07-27 09:05:46

+0

Cool , 謝謝。我會給你一個去,讓你知道。 – Damo 2012-07-27 09:08:11

4

的時間是正確的,但SimpleDateFormat()構造使用Locale.getDefault()內部調用包專用construtor。因此,您可以提供您自己的格式或提供其他語言環境,這似乎只能使用自定義格式,即使用SimpleDateFormat(String pattern, Locale locale)

問題是SimpleDateFormat()使用的是區域設置相關模式,因此係統的默認區域設置可能會導致與您在美國獲得的模式不同(我假設德國服務器不使用德語區域設置作爲其默認設置那麼你應該得到像06.04.09 11:30的日期)。

+0

「系統的默認語言環境」 - 所以是的,這就是我的想法。我更新了我的窗口日期格式從dd/MM/yyyy到MM/dd/yyyy - 但這沒有什麼區別。 – Damo 2012-07-27 09:01:07

+0

@Damo是否更改了操作系統中的格式?請注意,AFAIK對Java沒有影響。特定於語言環境的格式通常嵌入到Java庫中。但是Java選擇系統提供的區域設置作爲其默認值。您應該能夠更改使用以下系統屬性的語言環境:'-Duser.language = en -Duser.country = IE' – Thomas 2012-07-27 09:41:14

+0

我能夠使用'export LC_ALL = en_US.UTF- 8' - 謝謝 – Damo 2012-07-30 10:13:28