日期格式问题



以下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的日期)。

相关内容

  • 没有找到相关文章

最新更新