&引用;java.text.ParseException:不可解析的日期:";2017年6月18日上午5:39“;

&引用;java.text.ParseException:不可解析的日期:";2017年6月18日上午5:39“;,java,datetime,datetime-format,datetime-parsing,Java,Datetime,Datetime Format,Datetime Parsing,我有一个字符串中的日期和值,如2017年6月18日上午5:39 “2017年7月01日上午9:09”。现在我想用这种格式将这些日期转换成“2017-06-18 18:47:17”。我已使用此代码: String testDate = "18,June 2017, 5:39AM"; SimpleDateFormat formatter = new SimpleDateFormat("dd,MMMM yyyy , HH:mm a", Locale.ENGLISH); Date date = form

我有一个字符串中的日期和值,如2017年6月18日上午5:39
“2017年7月01日上午9:09”
。现在我想用这种格式将这些日期转换成
“2017-06-18 18:47:17”
。我已使用此代码:

String testDate = "18,June 2017, 5:39AM";
SimpleDateFormat formatter = new SimpleDateFormat("dd,MMMM yyyy , HH:mm a", Locale.ENGLISH);
Date date = formatter.parse(testDate);
System.out.println(date);
但我有一个例外:

线程“main”java.text.ParseException中的异常:不可解析日期:“2017年6月18日上午5:39”
在java.text.DateFormat.parse(DateFormat.java:366)


<如何> <代码> 18、2017年6月、6:47 PM“<代码> > <代码> 2017~0618 18:47:17“< /代码>?/p> < p>您必须在逗号上加单引号,去掉<代码> mm 和<代码> A<代码> < /P>之间的空白。
 SimpleDateFormat formatter = new SimpleDateFormat("dd','MMMM yyyy',' HH:mma", Locale.ENGLISH);
java.time 您正在使用可怕的日期时间类,这些类被JSR310中定义的现代java.time类所取代

定义与输入匹配的格式模式

指定
区域设置
,以确定用于翻译月份名称的人类语言,并确定用于确定本地化问题的文化规范

String input = "18,June 2017, 5:39AM" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "d,MMMM uuuu, h:mma").withLocale( Locale.US ) ;   
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
看这个


顺便说一下,这种格式化模式很糟糕。向数据发布者介绍该标准。

从您的示例来看,输入日期的PM/AM部分似乎与分钟部分直接相邻。但在您的格式中,分钟和am/pm标记之间有一个空格,yyyy和,,之间有一个空格,在删除空格和dpr建议的代码更改后,它不会给出解析异常。