码迷,mamicode.com
首页 > 其他好文 > 详细

技术杂记-日期时间字符串解析识别

时间:2015-12-29 22:26:04      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

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

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

 1   /**
 2     * 解析大部分常见日期格式 <br/>    
3   *
@param dateStr 要解析的字符串 5 * @return 时间对象,解析失败则为空 6 */ 7 public static Date parseDate(String dateStr){ 8 if(StringUtil.isBlank(dateStr)){ 9 return null; 10 } 11 String parse = dateStr; 12 DateFormat format = null; 13 parse = parse.replaceFirst("^(19|20){1}[0-9]{2}([^0-9]?)", "yyyy$2"); 14 parse = parse.replaceFirst("^[0-9]{2}([^0-9]?)", "yy$1"); 15 parse = parse.replaceFirst("([^0-9]?)(1{1}[0-2]{1}|0?[0-9]{1})([^0-9]?)", "$1MM$3"); 16 parse = parse.replaceFirst("([^0-9]?)(3{1}[0-1]{1}|[0-2]?[0-9]{1})([^0-9]?)", "$1dd$3"); 17 parse = parse.replaceFirst("([^0-9]?)(2[0-3]{1}|[0-1]?[0-9]{1})([^0-9]?)", "$1HH$3"); 18 parse = parse.replaceFirst("([^0-9]?)[0-5]?[0-9]{1}([^0-9]?)", "$1mm$2"); 19 parse = parse.replaceFirst("([^0-9]?)[0-5]?[0-9]{1}([^0-9]?)", "$1ss$2"); 20 try { 21 format = new SimpleDateFormat(parse); 22 Date date = format.parse(dateStr); 23 //log.debug("原始字符串:"+dateStr+",判断格式:"+parse+",解析结果:"+doFormatDate(date, FORMATTER_L)); 24 return date; 25 } catch (Exception e) { 26 if(!log.isDebugEnabled()){ 27 log.error("日期解析出错:"+parse+"-->"+dateStr); 28 } 29 log.debug("日期解析出错:"+parse+"-->"+dateStr, e); 30 } 31 return null; 32 }

 

技术杂记-日期时间字符串解析识别

标签:

原文地址:http://www.cnblogs.com/majinju/p/5087070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!