【发布时间】:2021-07-26 01:52:01
【问题描述】:
我有一个令人困惑的问题,请考虑以下工作代码:
package com.mycompany.mavenproject2;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
Date date = formatter.parse("01-Jan-2017 00:47:13");
System.out.println(date);
}
}
按预期执行时打印Sun Jan 01 00:47:13 CET 2017。
但是,当我在日期中将每个 - 替换为 . 点时:
package com.mycompany.mavenproject2;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("dd.MMM.yyyy HH:mm:ss");
Date date = formatter.parse("01.Jan.2017 00:47:13");
System.out.println(date);
}
}
代码在执行时抛出异常:
Exception in thread "main" java.text.ParseException: Unparseable date: "01.Jan.2017 00:47:13"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at com.mycompany.mavenproject2.Main.main(Main.java:11)
我使用的是 Java 版本 12 和德语语言环境。
有人有想法吗?
【问题讨论】:
-
如果我正确阅读了文档,则输入中的任何纯文本都必须与格式字符串完全匹配。似乎没有非此即彼的运算符,也没有匹配任何运算符。对于复杂的字符串,您可能必须找到另一个类或自己进行解析。
-
始终将
Locale与日期时间解析/格式化类型一起使用。检查answers to this question 了解更多信息。您的代码对我有用,因为我的默认Locale支持它。但是,我强烈建议您按照this solution 中的方式进行操作。 -
@markspace - 但他希望格式中的文字点与输入中的文字点匹配。
-
另外,请注意旧的日期时间 API(
java.util日期时间类型及其格式化 API,SimpleDateFormat)已过时且容易出错。建议彻底停止使用,改用java.time,modern date-time API -
我已经在 Java 11 上重现了所描述的行为,默认为德语区域设置。
标签: java date format simpledateformat