各种形式的日期格式标准化

冰a冰 2021-03-30 03:08:40
在近期的文本解析过程中需要提取文本内的日期并规范格式,常用格式为“yyyy-MM-dd”。
由于写法各异,无法用Date函数或SimpleDateFormat函数格式化,所以自己实现了一个方法。
经过测试后凡是带有分隔符的日期都能准确提取,现在不知道是否完善,代码如下:
// 个位数的月份正则
static Pattern month = Pattern.compile("(?<=-)\\d(?=-)");
// 个位数的日/号正则
static Pattern day = Pattern.compile("(?<=-)\\d$");
public static String formatDate(String sourceDate) {
sourceDate = sourceDate.replaceAll("[年月../—]","-")
.replaceAll("[号日]$", "")
.replaceAll("[〇零OOo0]","0")
.replace("一","1")
.replace("二","2")
.replace("三","3")
.replace("四","4")
.replace("五","5")
.replace("六","6")
.replace("七","7")
.replace("八","8")
.replace("九","9")
.replace("廿","2");
// 十月的十转换为 10
sourceDate = sourceDate.replaceAll("(?<=-)十(?=-)","10");
// 十几的十转换为 1
sourceDate = sourceDate.replaceAll("(?<=-)十(?=\\d)","1");
// 整十的十转换为 0
sourceDate = sourceDate.replaceAll("(?<=\\d)十$","0");
// 几十几的十删掉
sourceDate = sourceDate.replaceAll("(?<=\\d)十(?=\\d)","");
// 个位数月份前面加 0
Matcher matcher = month.matcher(sourceDate);
if (matcher.find()) {
sourceDate = sourceDate.substring(0,matcher.start()) + "0" + sourceDate.substring(matcher.start());
}
// 个位数日期前面加 0
matcher = day.matcher(sourceDate);
if (matcher.find()) {
sourceDate = sourceDate.substring(0,matcher.start()) + "0" + sourceDate.substring(matcher.start());
}
return sourceDate;
}
...全文
603 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰a冰 2021-04-08
  • 打赏
  • 举报
回复
引用 1 楼 qq_42330678 的回复:
你可以百度一下Hutool这个工具类,参考下他里面的,这是是国人写的
好的,感谢!
兴兴兴兴吖 2021-04-07
  • 打赏
  • 举报
回复
你可以百度一下Hutool这个工具类,参考下他里面的,这是是国人写的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧