2012-04-24 40 views
2

我有这样的方法:与日期时间解析器格式错误

public Date parseDate(String dateStr) { 
     try { 
     SimpleDateFormat sdfSource = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S z"); 
     return sdfSource.parse(dateStr); 
     } 
     catch(Exception e) { 
     throw new RuntimeException("Error occurred while parsing date: " + dateStr); 
     } 
    } 

而且我的单元测试如下:

public void testEDTDate() throws Exception { 
     DateFormatConverter converter = new DateFormatConverter(); 
     Date date = converter.parseDate("2009-09-15 15:28:20.0 EDT"); 
     System.out.println("Converted Date: " + date.toString()); 
    } 

输出是:

Wed Sep 16 02:28:20 ICT 2009 

这会对本机测试失败。预期结果如下:

Tue Sep 15 15:28:20.0 EDT 2009 

输出的格式在错过第二个格式时也错误。我应该如何修复以按预期显示日期?

+0

请检查这个.. http://stackoverflow.com/questions/4203718/converting-string-to-date-with-timezone – 2012-04-24 15:00:40

回答

3

当您使用给定的格式解析date时,您不能指望date.toString()返回相同的格式 - 它们不相关。

您需要使用DateFormat#format(Date)才能获得给定格式的String,否则您将获得系统/实现默认设置。

+0

当我使用的DateFormat#格式(日期),如你所说,但结果仍然是ICT时区:2009-09-16 02:28:20.0 ICT。我想期望结果字符串作为给定的输入 – Barcelona 2012-04-24 14:28:14

+0

如何使用'DateFormat#setTimeZone(TimeZone)'? – Romain 2012-04-24 14:56:32