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
。