数据分类分级 数据辨认-辨认日期范例数据

[复制链接]
发表于 2026-2-23 17:39:12 | 显示全部楼层 |阅读模式
前面针对数据安全-数据分类分级方案操持做了分析教学,详细内容可点击数据安全-数据分类分级方案操持,不再做赘述
  

上面图片是AI创作天生!如需咒语可私戳哦!


媒介

要做数据分类分级,告急的是分类分级模版的公道性和数据辨认的精确性。数据辨认重要技能涉及正则表达式、关键字典、呆板学习、NLP、文档指纹等。对于结构化数据,具有肯定规则的数据通常是正则表达式或算法来办理。本篇博客针对日期范例数据的辨认睁开教学。
需求

使用正则表达式辨认如下日期范例数据,验证是否为合法的日期字符串,并转化为数据库的datetime范例(yyyy-MM-dd HH:mm:ss)
日期格式

本次数据辨认针对的日期格式如下
   

  • // 2001年02月10日
    yyyy年M月d日
  • // 二〇逐一年三月七日
    yyyy年M月d日
  • // 2001/2/20
    yyyy/M/d
  • // 2001-2-20
    yyyy-MM-dd
  • // 20010220
    yyyyMMdd
  • // 20010220000000
    yyyyMMddHHmmss
  • // 2001/02/07 00:00:00
    yyyy/MM/dd HH:mm:ss
  • // 2001-03-07 14:00:00
    yyyy-MM-dd HH:mm:ss
  • // 2001/2/20 10:00 PM
    yyyy/MM/dd hh:mm a
  代码

颠末验证详细代码如下
  1. package test.dateUtil;
  2. import com.alibaba.excel.util.StringUtils;
  3. import java.text.DateFormat;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.Locale;
  7. import java.util.regex.Pattern;
  8. /**
  9. * @author kunZhi
  10. * @date 2023/4/22 19:40
  11. */
  12. public class DateTest {
  13.     public static void main(String[] args) {
  14.         regex1("2001年02月10日");
  15.         regex1("二〇一一年三月七日");
  16.         regex1("2001/2/20");
  17.         regex1("2001-2-20");
  18.         regex1("20010220");
  19.         regex1("20010220000000");
  20.         regex1("2001/02/07 00:00:00");
  21.         regex1("2001-03-07 14:00:00");
  22.         regex1("2001/2/20 10:00 PM");
  23.     }
  24.    
  25.     public static String convertChineseNumToArabicNum(String str) {
  26.         String[] chineseNums = {"十月", "二十日", "三十日", "月十日", "二十", "三十", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "〇"};
  27.         String[] arabicNums = {"10月", "20日", "30日", "月10日", "2", "3", "1", "2", "3", "4", "5", "6", "7", "8", "9", "1", "0"};
  28.         for (int i = 0; i < chineseNums.length; i++) {
  29.             str = str.replace(chineseNums[i], arabicNums[i]);
  30.         }
  31.         return str;
  32.     }
  33.     public static void regex1(String inputDateStr) {
  34.         String patternDate = null;
  35.         //2001年3月7日
  36.         if (Pattern.compile("^\\d{4}年\\d{1,2}月\\d{1,2}日$").matcher(inputDateStr).matches()) {
  37.             patternDate = "yyyy年M月d日";
  38.         } else if (Pattern.compile("^二[零〇一二三四五六七八九]{1,3}年(十[一二]|[一-九])月(三十|三十一|十[一-九]|二十[一-九]|[一-九])日$").matcher(inputDateStr).matches()) {
  39.             //二〇〇一年三月七日
  40.             inputDateStr = convertChineseNumToArabicNum(inputDateStr);
  41.             patternDate = "yyyy年M月d日";
  42.         } else if (Pattern.compile("^\\d{4}/\\d{1,2}/\\d{1,2}$").matcher(inputDateStr).matches()) {
  43.             //2001/3/7
  44.             patternDate = "yyyy/M/d";
  45.         } else if (Pattern.compile("^\\d{4}-\\d{1,2}-\\d{1,2}$").matcher(inputDateStr).matches()) {
  46.             //2001-3-7
  47.             patternDate = "yyyy-MM-dd";
  48.         } else if (Pattern.compile("^\\d{8}$").matcher(inputDateStr).matches()) {
  49.             //20010307
  50.             patternDate = "yyyyMMdd";
  51.         } else if (Pattern.compile("^\\d{14}$").matcher(inputDateStr).matches()) {
  52.             //20010307121212
  53.             patternDate = "yyyyMMddHHmmss";
  54.         } else if (Pattern.compile("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}:([0-5]\\d):([0-5]\\d)$").matcher(inputDateStr).matches()) {
  55.             //2001/3/7 0:00
  56.             patternDate = "yyyy/MM/dd HH:mm:ss";
  57.         } else if (Pattern.compile("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:([0-5]\\d):([0-5]\\d)$").matcher(inputDateStr).matches()) {
  58.             //2001-3-7 0:00
  59.             patternDate = "yyyy-MM-dd HH:mm:ss";
  60.         }  else if (Pattern.compile("^\\d{4}/\\d{1,2}/\\d{1,2}\\s(0?\\d|1[0-2]):([0-5]\\d) (AM|PM)$").matcher(inputDateStr).matches()) {
  61.             //2001/3/7 12:00 AM
  62.             patternDate = "yyyy/MM/dd hh:mm a";
  63.         } else {
  64.             System.out.println("无法匹配的字符串 :" + inputDateStr);
  65.         }
  66.         if (!StringUtils.isEmpty(patternDate)) {
  67.             Date inputDate = new Date();
  68.             if (patternDate.equals("yyyy/MM/dd hh:mm a")) {
  69.                 DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm a", Locale.ENGLISH);
  70.                 format.setLenient(false); // 设置为严格解析日期
  71.                 try {
  72.                     inputDate = format.parse(inputDateStr);
  73.                 } catch (Exception e) {
  74.                     System.out.println("解析日期字符串出错:" + e.getMessage());
  75.                 }
  76.             } else {
  77.                 SimpleDateFormat inputDateFormat = new SimpleDateFormat(patternDate);
  78.                 inputDateFormat.setLenient(false); // 设置为严格解析日期
  79.                 // 解析输入字符串为Date对象
  80.                 try {
  81.                     inputDate = inputDateFormat.parse(inputDateStr);
  82.                 } catch (Exception e) {
  83.                     System.out.println("解析日期字符串出错:" + e.getMessage());
  84.                 }
  85.             }
  86.             // 将Date对象格式化为目标格式的字符串
  87.             SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  88.             String outputDateStr = outputDateFormat.format(inputDate);
  89.             System.out.println("输入字符串:" + inputDateStr + "目标格式的字符串:" + outputDateStr + "\n");
  90.         }
  91.     }
  92. }
复制代码
日期范例数据对应正则表达式

   //2001年3月7日
  

  • “^\d{4}年\d{1,2}月\d{1,2}日$” “yyyy年M月d日”
  //二〇〇一年三月七日
  

  • “^二[零〇一二三四五六七八九]{1,3}年(十[一二]|[一-九])月(三十|三十一|十[一-九]|二十[一-九]|[一-九])日$”
  • “yyyy年M月d日”
  //2001/3/7
  

  • “^\d{4}/\d{1,2}/\d{1,2}$” “yyyy/M/d”
  //2001-3-7
  

  • “^\d{4}-\d{1,2}-\d{1,2}$” “yyyy-MM-dd”
  //20010307
  

  • “^\d{8}$”) “yyyyMMdd”
  //20010307121212
  

  • “^\d{14}$” “yyyyMMddHHmmss”
  //2001/3/7 0:00
  

  • “^\d{4}/\d{1,2}/\d{1,2}\s\d{1,2}😦[0-5]\d)😦[0-5]\d)$”
  • “yyyy/MM/dd HH:mm:ss”
  //2001-3-7 0:00
  

  • “^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}😦[0-5]\d)😦[0-5]\d)$”
  • “yyyy-MM-dd HH:mm:ss”
  //2001/3/7 12:00 AM
  

  • “^\d{4}/\d{1,2}/\d{1,2}\s(0?\d|1[0-2])😦[0-5]\d) (AM|PM)$”
  • “yyyy/MM/dd hh:mm a”
  
末了

   

  • 悦目标灵魂千篇划一,风趣的鲲志一百六七!
  • 假如以为文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页 尚有很多风趣的文章,欢迎小搭档们前往点评
  • 假如有什么必要改进的地方还请大佬指出❌
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表