2012-07-27 82 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