以下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);
}
是否尝试过为SimpleDateFormat提供模式?
SimpleDateFormat dateFormatter = new SimpleDateFormat("d/M/yy HH:mm a");
时间是正确的,但SimpleDateFormat()
构造函数在内部使用Locale.getDefault()
调用包专用构造函数。因此,您可以提供自己的格式,也可以提供另一个区域设置,这似乎只有使用自定义格式才能实现,即使用SimpleDateFormat(String pattern, Locale locale)
。
问题是SimpleDateFormat()
使用依赖于区域设置的模式,因此系统的默认区域设置可能会导致与美国不同的模式(我认为德国服务器不使用德语区域设置作为默认模式,因为从那时起,您应该获得类似06.04.09 11:30
的日期)。