Java:不可parsing的dateexception

在尝试转换date格式时,我得到一个exception:无法parsing的date,不知道如何解决这个问题。

我正在接收一个表示事件date的string,并希望在GUI中以不同的格式显示此date。

我想要做的是以下几点:

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(); 

是虚拟的。 我想以下列格式获取datestring:

dd.MM.yyyy HH:mm:ss

而inputstring的例子如下:

2010-01-04 01:32:27 UTC

有谁知道如何将上面的示例date(string)转换为string格式dd.MM.yyyy HH:mm:ss?

谢谢!

编辑:我修正了错误的inputdate格式,但仍然无法正常工作。 上面是粘贴的方法,下面是debugging会话的屏幕图像。

替代文字http://img683.imageshack.us/img683/193/dateproblem.png

#更新我跑了

 String[] timezones = TimeZone.getAvailableIDs(); 

并且在数组中有UTCstring。 这是一个奇怪的问题。

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

 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"; } } 

但是我仍然宁愿改变原始input而不切入时区。

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

你基本上在这里做的是依靠Date#toString() ,它已经有一个固定的模式。 要将Java Date对象转换为另一种人类可读的String模式,您需要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); } 

顺便说一下,“unparseable date”exception在这里只能SimpleDateFormat#parse()引发。 这意味着inputDate不处于预期模式"yyyy-MM-dd HH:mm:ss z" 。 您可能需要修改模式以匹配inputDate的实际模式。

更新:好的,我做了一个testing:

 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 

(我在格林威治标准时间4)

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