我试图将String
解析为Data
,我创建了DataParser,根据日期格式,我写的代码是:
String date_s = "04-May-2017 17:28:27";
DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
Date date;
try {
date = formatter.parse(date_s);
System.out.println(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当我执行此操作时,我总是异常
java.text.ParseException: Unparseable date: "04-May-2017 17:28:27"
我不明白为什么没有解析数据,有人可以帮助我吗?
答案 0 :(得分:2)
如果没有现代化的解决方案,这个答案的话题就不会完整。这些天你不应再使用Date
和SimpleDateFormat
,而是切换到更新的日期和时间类:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss", Locale.ENGLISH);
LocalDateTime dateTime;
try {
dateTime = LocalDateTime.parse(date_s, formatter);
System.out.println(dateTime);
} catch (DateTimeParseException e) {
System.err.println(e);
}
打印
2017-05-04T17:28:27
(LocalDateTime.toString()
返回ISO 8601格式)如果遗漏Locale.ENGLISH
,请在我的计算机上
Text '04-May-2017 17:28:27' could not be parsed at index 3
索引3是它所说的May
,所以这个消息有点帮助。
LocalDateTime
和DateTimeFormatter
是在Java 8中引入的,但也被反向移植到Java 6和7中。
答案 1 :(得分:0)
您要解析的字符串是本地相关的(单词可能是英文),因此jvm无法推断可能是英语中may的月份
使用构造函数qith locale定义格式化程序。
DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH);
答案 2 :(得分:0)
您需要另一个Locale
支持MMM
的构造函数(五月)
DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.US)
或使用带有月份数字的标准格式dd-MM-yyyy
。
(对不起,与此同时答案已经发布)