第一種思路:
格式:
MM/dd/yyyy HH:mm:ss
\d{1,2}/\d{1,2}/\d{4}(\s\d{1,2}:\d{1,2}:\d{1,2})?
2019/12/12 11:11:11
\d{4}/\d{1,2}/\d{1,2}(\s\d{1,2}:\d{1,2}:\d{1,2})?
2017-04-31 11:00:00
^(\d{4})-([0-1]\d)-([0-3]\d)\s([0-5]\d):([0-5]\d):([0-5]\d)$
實現:
//校驗時間 2019/12/12 11:11:11
String serviceReg="\\d{4}/\\d{1,2}/\\d{1,2}(\\s\\d{1,2}:\\d{1,2}:\\d{1,2})?";
if(StringUtils.isNotBlank(serviceStartTime)){
boolean checkServiceStartTime = serviceStartTime.matches(serviceReg);
if(!checkServiceStartTime){
archivesSaleInfoImport.setImportFailReason("包含不合法的服務期限");
failList.add(archivesSaleInfoImport);
continue;
}
}
if(StringUtils.isNotBlank(serviceEndTime)){
boolean checkServiceEndTime = serviceEndTime.matches(serviceReg);
if(!checkServiceEndTime){
archivesSaleInfoImport.setImportFailReason("包含不合法的服務期限");
failList.add(archivesSaleInfoImport);
continue;
}
}
另一種思路: public static boolean isValidDate(String str) {
boolean convertSuccess=true;
// 指定日期格式為四位年/兩位月份/兩位日期,注意yyyy/MM/dd區分大小寫;
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm");
try {
// 設置lenient為false. 否則SimpleDateFormat會比較寬松地驗證日期,比如2007/02/29會被接受,並轉換成2007/03/01
format.setLenient(false);
format.parse(str);
} catch (ParseException e) {
// e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就說明格式不對
convertSuccess=false;
}
return convertSuccess;
}
基於Jdk1.8線程安全的校驗:
try {
String date = "2021/11/30 11:11:59";
final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(date, DATE_TIME_FORMATTER);
// LOCAL_DATE_FORMAT.get().parse(date);
System.out.println(dateTime.toString().replaceAll("T"," "));
} catch (DateTimeParseException e) {
System.out.println(e);
}