java - 字符串到日期格式,反之亦然
问题描述
String dateFormat = "20211109";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
我收到一个错误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);
否则,您可以在构造时更改日期模式SimpleDateFormat
:
String dateFormat = "20211109";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
编辑
您可以使用正则表达式模式匹配根据您输入的格式化字符串在格式化程序之间切换:
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);
您也可以捕获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);
推荐阅读
- sql - SQL 完整性检查在更新和插入时不同
- javascript - 使用 getElementsByClassName() 方法获取匹配类的前 x 个元素
- java - 当条件为真时将元素从一个数组插入另一个数组
- javascript - 使用AngularJS显示php读取的mongodb数据
- java - 使用分布式计数器提高性能,寻找库
- sql - 从 Excel 文件生成 SQL 脚本(带有多个工作表)
- c# - 如何在私有存储中存储 SSL/TLS 证书
- svg - 置换贴图过滤器不适用于旋转对象
- php - 删除 PHPexcel 中的空第一行
- reactjs - 无法解决反应原生地图中的依赖关系?