在尝试转换日期格式时,我得到一个例外:不可解析的日期,不知道如何解决这个问题。
我收到一个代表事件日期的字符串,并希望在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
并且输入String示例如下:
2010-01-04 01:32:27 UTC
有谁知道如何将上面的示例日期(字符串)转换为字符串格式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 :(得分:48)
你在这里基本上做的是依靠已经有固定模式的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);
}
顺便说一句,“{notnsable 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
。
答案 1 :(得分:0)
从Oracle文档中,Date.toString()方法将Date object转换为特定形式的字符串-请勿在Date对象上使用toString方法。尝试使用:
String stringDate = new SimpleDateFormat(YOUR_STRING_PATTERN).format(yourDateObject);
下一步是将stringDate解析为Date:
Date date = new SimpleDateFormat(OUTPUT_PATTERN).parse(stringDate);
请注意,parse方法会引发ParseException