代码是从项目里抽出来的,没有细整理。应用场景是在码值翻译的时候,需要把不同格式的时间翻译一下。我们的项目是导入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;
}代码是从项目里抽出来的,没有细整理。应用场景是在码值翻译的时候,需要把不同格