zoukankan      html  css  js  c++  java
  • 技术杂记-日期时间字符串解析识别

      日期时间的格式可谓千奇百怪,做数据汇集相关项目时就会需要识别各种日期时间格式(因为数据来源广泛不可控),然后转换为标准格式或Date类型。

      我之前看到同事的一个时间解析方法,当时觉得已经很不错了,后来网上搜索发现这个方法在搜索结果中多次出现,来源就不清楚。我是因项目需要更精确的识别日期时间字符串,于是我慢慢改进原来的方法,以下就是改进后的方法,java语言实现,只要看懂逻辑,应该很容易翻译成其他语言。

        /**
        * 解析大部分常见日期格式 <br/>
        * @author jingma@iflytek.com
        * @param dateStr 要解析的字符串
        * @return 时间对象,解析失败则为空
        */
        public static Date parseDate(String dateStr){
            if(StringUtil.isBlank(dateStr)){
                return null;
            }
            String parse = dateStr;
            DateFormat format = null;
            parse = parse.replaceFirst("^(18|19|20|21){1}[0-9]{2}([^0-9]?)", "yyyy$2");
            parse = parse.replaceFirst("^[0-9]{2}([^0-9]?)", "yy$1");
            parse = parse.replaceFirst("([^0-9]?)(1{1}[0-2]{1}|0?[1-9]{1})([^0-9]?)", "$1MM$3");
            parse = parse.replaceFirst("([^0-9]?)(3{1}[0-1]{1}|[0-2]?[0-9]{1})([^0-9]?)", "$1dd$3");
            parse = parse.replaceFirst("([^0-9]?)(2[0-3]{1}|[0-1]?[0-9]{1})([^0-9]?)", "$1HH$3");
            parse = parse.replaceFirst("([^0-9]?)[0-5]?[0-9]{1}([^0-9]?)", "$1mm$2");
            parse = parse.replaceFirst("([^0-9]?)[0-5]?[0-9]{1}([^0-9]?)", "$1ss$2");
            try {
                format = new SimpleDateFormat(parse);
                //设置为严格验证时间格式,默认是非严格的,1月32不会报错,会解析为2月1号。
                format.setLenient(false);
                Date date = format.parse(dateStr);
                log.debug(String.format("原始字符串:%s,判断格式:%s,解析结果:%s", dateStr,parse,sdf.format(date)));
                return date;
            } catch (Exception e) {
                log.error(String.format("日期解析出错:%s-->%s",parse,dateStr));
                log.debug(null, e);
            }
            return null;
        }
  • 相关阅读:
    SDUTOJ 2775 小P的故事——奇妙的饭卡
    STL vector的构造函数和析构函数(2)
    Spark调研笔记第6篇
    【精】iOS GCD 具体解释
    爆头
    uva 624 CD
    一站式学习Wireshark(转载)
    TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
    loadrunner两个函数:取参数长度和时间戳函数
    自行控制loadrunner的socket协议性能测试 (转)
  • 原文地址:https://www.cnblogs.com/majinju/p/5087070.html
Copyright © 2011-2022 走看看