" java.text.ParseException:Unparseable date:" 18,June 2017,5:39 AM"

时间:2017-07-31 07:18:48

标签: java datetime datetime-format datetime-parsing

我在字符串和值"18,June 2017, 5:39AM"和{}中有一个日期 "01,July 2017, 9:09AM"。现在我想以这种格式将这些日期转换为"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:Unparseable date:" 18,June 2017,5:39 AM"
          在java.text.DateFormat.parse(DateFormat.java:366)

如何将"18,June 2017, 6:47PM"转换为"2017-06-18 18:47:17"

2 个答案:

答案 0 :(得分:3)

您必须在逗号周围添加单引号并删除mma之间的空白

 SimpleDateFormat formatter = new SimpleDateFormat("dd','MMMM yyyy',' HH:mma", Locale.ENGLISH);

答案 1 :(得分:1)

java.time

您正在使用可怕的日期时间类,这些日期-时间类已被JSR 310中定义的现代 java.time 类取代。

定义格式设置模式以匹配您的输入。

指定Locale以确定用于翻译月份名称的人类语言,并确定用于决定本地化问题的文化规范。

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

请参阅此code run live at IdeOne.com

顺便说一句,这种格式化模式很糟糕。向您的数据发布者介绍ISO 8601标准。