2010-01-05 98 views
18

在尝试转换日期格式时,我得到一个异常:无法解析日期,不知道如何解决此问题。Java:可解析日期异常

我收到一个字符串,它表示一个事件日期,并希望在GUI中以不同的格式显示此日期。

什么,我试图做的是以下几点:

private String modifyDateLayout(String inputDate){ 
     try { 
      //inputDate = "2010-01-04 01:32:27 UTC"; 
      Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
      return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return "15.01.2010"; 
     } 
    } 

反正行

String modifiedDateString = originalDate.toString(); 

是假的。我想获得在以下格式的日期字符串:

DD.MM.YYYY HH:MM:SS

和输入字符串例子如下:

2010-01-04 01:32:27 UTC

有没有人知道如何将上面的例子date(String)转换成字符串格式dd.MM.yyyy HH:mm:ss?

谢谢!

编辑:我修正了错误的输入日期格式,但仍然无效。上面是粘贴的方法,下面是调试会话的屏幕图像。

alt text http://img683.imageshack.us/img683/193/dateproblem.png

#UPDATE 我跑

String[] timezones = TimeZone.getAvailableIDs(); 

并没有UTC字符串在数组中。这是一个奇怪的问题。

我做了一个肮脏的黑客的作品:

private String modifyDateLayout(String inputDate){ 
    try { 
     inputDate = inputDate.replace(" UTC", ""); 
     Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate); 
     return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     return "15.01.2010"; 
    } 
} 

但我仍宁愿改造原有的输入而不切割时区了。

此代码是为使用JDK 1.6的Android手机编写的。

+0

我知道这是一个很久以前的线程,但要澄清关于“UTC”处于日期格式时解析异常的疑问。该代码在Android中被破解。 [Android bug报告](http://code.google.com/p/android/issues/detail?id=14963) – Creniale 2011-04-29 04:01:21

回答

39

你基本上在这里做的是依靠Date#toString()已经有一个固定的模式。要将Java Date对象转换为另一种人类可读的字符串模式,您需要SimpleDateFormat#format()

private String modifyDateLayout(String inputDate) throws ParseException{ 
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
} 

顺便说一句,在“无法解析日期”的异常可以在这里SimpleDateFormat#parse()抛出。这意味着inputDate未处于预期模式"yyyy-MM-dd HH:mm:ss z"。您可能需要修改该模式以匹配inputDate的实际模式。

更新:好吧,我做了一个试验:

public static void main(String[] args) throws Exception { 
    String inputDate = "2010-01-04 01:32:27 UTC"; 
    String newDate = new Test().modifyDateLayout(inputDate); 
    System.out.println(newDate); 
} 

此打印正确:

03.01.2010 21:32:27 

(我在GMT-4)

更新2:根据你的编辑,你真的得到了ParseException。最可疑的部分将是UTC的时区。在您的Java环境中,这实际上是是否已知?你使用什么Java版本和什么操作系统版本?检查TimeZone.getAvailableIDs()。中间必须有一个UTC

+0

问题在于行date date = formatter.parse(inputDate); 引发异常。我将输入格式固定为yyyy-MM-dd HH:mm:ss z,但仍然会引发异常。 – 2010-01-05 21:43:20

+0

我预计,看到我的编辑是在你评论之前添加的。如果您需要更多帮助以找到正确的模式,则需要发布** actual **'inputDate'值的示例。 – BalusC 2010-01-05 21:43:41

+1

我有这个麻烦来解析这个日期:“11/10/2011 06:03:19下午” – DkAngelito 2011-10-12 00:19:06