代码是从项目里抽出来的,没有细整理。应用场景是在码值翻译的时候,需要把不同格式的时间翻译一下。我们的项目是导入zip包,保存老数据,思路是先去判断xml文件里面的时间是什么格式的,然后根据具体的格式转换。 Docking annotation = field.getAnnotation(Docking.class); String format = annotation.dateFormat(); if (value.trim().length() == 10) { format = "yyyy-MM-dd"; } else if (value.trim().length() == 8) { format = "yyyyMMdd"; } else if (value.trim().length() == 4) { format = "yyyy"; } else if (value.trim().length() == 6) { format = "yyyyMM"; } else if (value.trim().length() == 19) { format = "yyyy-MM-dd HH:mm:ss"; } Date date = DateUtil.stringToDateFormat(value, format); field.set(t, date); public static Date stringToDateFormat(String date, String format) throws Exception{ // 时间格式:yyyyMMddHHmmss.例如:20161213232255 String yMdHms = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})" + "(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|" + "(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" + "((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$"; if(Pattern.matches(yMdHms, date)){ format = "yyyyMMddHHmmss"; } // 精确到日即可,即年月日,格式:yyyyMMdd,例如:20161213 String yMd = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])" + "(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})" + "(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))$"; if(Pattern.matches(yMd, date)){ format = "yyyyMMdd"; } // 精确到日即可,即年月日,格式:yyyy-MM-dd,例如:2016-12-13 String yMd2 = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])" + "-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|" + "((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))$"; if(Pattern.matches(yMd2, date)){ format = "yyyy-MM-dd"; } // 校验时分秒:格式:HHmmss String Hms = "([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$"; if(Pattern.matches(Hms, date)){ format = "HHmmss"; } // 校验时分秒:格式:HH-mm-ss String Hms2 = "([0-1]?[0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9])$"; if(Pattern.matches(Hms2, date)){ format = "HH-mm-ss"; } String Hms3 = "([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; if(Pattern.matches(Hms3, date)){ format = "HH:mm:ss"; } // 校验 yyyy-MM-dd HH:mm:ss(日期和时间之间有一个或多个空格) String defaultFormat = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-" + "(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|" + "(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" + "((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; if(Pattern.matches(defaultFormat, date)){ format = "yyyy-MM-dd HH:mm:ss"; } Date date1 = null; try { SimpleDateFormat mySimpleDateFormat = new SimpleDateFormat(format); date1 = mySimpleDateFormat.parse(date); } catch (Exception e) { logger.error("日期字段转换,待转换值:" + date + ",无法转换成日期"); throw e; } return date1; }
正则匹配时间格式
最新推荐文章于 2023-04-07 15:26:01 发布