1:工具類——本例的核心,其中有兩點注意的地方,一是使用了嚴格轉換方式,二是將轉換成的日期又轉換成字符串和原字符串進行了二次比較
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @date 2017-05-10 上午 09:08:00 * @since: JDK 1.7 * @Version: V1.0 */ public class DateUtil { /** * 聲明一個日志記錄器 */ private static final Logger LOGGER = LoggerFactory.getLogger(DateUtil.class); /** * 判斷是否是對應的格式的日期字符串 * @param dateStr * @param datePattern * @return */ public static boolean isRightDateStr(String dateStr,String datePattern){ DateFormat dateFormat = new SimpleDateFormat(datePattern); try { //采用嚴格的解析方式,防止類似 “2017-05-35” 類型的字符串通過 dateFormat.setLenient(false); dateFormat.parse(dateStr); Date date = (Date)dateFormat.parse(dateStr); //重復比對一下,防止類似 “2017-5-15” 類型的字符串通過 String newDateStr = dateFormat.format(date); if(dateStr.equals(newDateStr)){ return true; }else { LOGGER.error("字符串dateStr:{}, 不是嚴格的 datePattern:{} 格式的字符串",dateStr,datePattern); return false; } } catch (ParseException e) { LOGGER.error("字符串dateStr:{},不能按照 datePattern:{} 樣式轉換",dateStr,datePattern); return false; } } }
2:簡單的測試類
public class TestMain { public static void main(String[]args){ System.out.println(DateUtil.isRightDateStr("2017-05-15","yyyy-MM-dd")); System.out.println(DateUtil.isRightDateStr("2017-5-15","yyyy-MM-dd")); System.out.println(DateUtil.isRightDateStr("2017-01-88","yyyy-MM-dd")); System.out.println(DateUtil.isRightDateStr("2017-21-88","yyyy-MM-dd")); System.out.println(DateUtil.isRightDateStr("21:88","HH:mm")); System.out.println(DateUtil.isRightDateStr("01:10","HH:mm")); System.out.println(DateUtil.isRightDateStr("25:00","HH:mm")); } }