Aaa*_*Aaa -1 java date-parsing date-formatting spring-boot
String dateFormat = "20211109";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
Run Code Online (Sandbox Code Playgroud)
我收到错误Unparseable date: "20211109"
如何将日期转换为给定格式并解析?
鉴于 的格式,您使用了错误的输入SimpleDateFormat,该格式应为以下形式11/09/2021(请注意,月份在日期之前):
String dateFormat = "11/09/2021";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
Run Code Online (Sandbox Code Playgroud)
否则,您可以在构建时更改日期模式SimpleDateFormat:
String dateFormat = "20211109";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式模式匹配根据输入格式化字符串在格式化程序之间切换:
Pattern pattern = Pattern.compile("^\\d{8}$");
SimpleDateFormat sdf;
if (pattern.matcher(input).matches()) {
sdf = new SimpleDateFormat("yyyyMMdd");
} else {
sdf = new SimpleDateFormat("MM/dd/yyyy");
}
Date strtDt = sdf.parse(input);
String strt = sdf.format(strtDt);
Run Code Online (Sandbox Code Playgroud)
您还可以捕获ParseException尝试另一种格式解析,但我不建议您的程序流程使用异常。
正如 @Ole VV 在他的评论中建议的那样,您不应该使用java.text.SimplateDateFormat和java.util.Date类来进行日期类型操作和解析,因为它们已经过时,并且可能会造成很多麻烦。
如果您使用的是 JDK 1.8 及更高版本,则应该使用JSR 310中引入的新日期时间API :
String dateFormat = "20211109";
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
// Same as `DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");`
LocalDateTime strtDt = formatter.parse(dateFormat, LocalDateTime::from);
String strt = formatter.format(strtDt);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |