【发布时间】:2020-11-29 01:23:12
【问题描述】:
我在尝试将日期字符串解析为 java.util.Date 时遇到异常。
这就是我正在做的,
String format = "yyyy-MM-dd hh:mm a";
String strDateTime = "2016-03-04 11:30 am";
SimpleDateFormat sdformat = new SimpleDateFormat(format);
try {
Date date = sdformat.parse(strDateTime);
System.out.println(sdformat.format(date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
得到了这个
java.text.ParseException: Unparseable date: "2016-03-04 11:30 am"
at java.base/java.text.DateFormat.parse(DateFormat.java:396)
at testing.MainClass.main(MainClass.java:18)
我已经这样做了很多次,并且模式看起来正确。可能是我没有看到我在这里做错了什么 我正在使用 Java 8,我在 eclipse 中的执行环境也是 8。 直到今天这段代码运行良好。
但是,如果我将日期字符串更改为 a.m. => "2016-03-04 11:30 a.m."
它解析成功
输出:
2016-03-04 11:30 a.m.
此行为与 LocalDateTime 相同。
java.time.format.DateTimeParseException: Text '2016-03-04 11:30 am' could not be parsed at index 17
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2050)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:493)
at testing.MainClass.main(MainClass.java:27)
我在网上看到的所有SimpleDateFormat 的例子都只是使用“am/pm”而不是“a.m./p.m”。
我在这里做错了什么。
-谢谢
【问题讨论】:
-
您的代码在 Oracle JDK 15.0.1 下为我成功运行。
SimpleDateFormat的 Javadoc 也不在 'am' 和 'pm' 中显示点。也就是说:我不知道!您使用的是哪个 JDK/JVM(即 Oracle、OpenJDK、IBM J9 ......)?而且,你的语言环境是什么?我是 en_US。 -
我使用oracle jdk
-
我怀疑是语言环境问题。如果您明确指定美国语言环境,它是否有效?
SimpleDateFormat sdformat = new SimpleDateFormat(format, Locale.US); -
如果我使用 Locale 则 SimpleDateFormat 有效,但 LocalDateTime 无效
-
仅供参考,
Date和SimpleDateFormat都是糟糕的日期时间类,多年前已被 JSR 310 中定义的现代 java.time 类取代。跨度>
标签: java date parsing simpledateformat