1.驗證傳入的字符串是否是yyyy-MM-dd格式,是否是正確的日期
public static String REGEX = "((19|20)[0-9]{2})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])";
public static String REGEX1 = "(\\d{4})-(\\d+)-(\\d+).*";
public static boolean match(String timeStr){
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(timeStr);
if (matcher.matches()) {
pattern = Pattern.compile(REGEX1);
matcher = pattern.matcher(timeStr);
if (matcher.matches()) {
int y = Integer.valueOf(matcher.group(1));
int m = Integer.valueOf(matcher.group(2));
int d = Integer.valueOf(matcher.group(3));
if (d > 28) {
Calendar c = Calendar.getInstance();
c.set(y, m-1, 1);
int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
return (lastDay >= d);
}
}
return true;
}
return false;
}
執行結果:
2.獲得傳入日期的第二天
做開發中遇到查詢條件,傳入的是沒有時間的日期類型,而比較的是yyyy-MM-dd HH:mm:ss類型的有時間的,若截止日期比較的話就會捨去截止日期的那天的數據,所以比較的時候要往後推一天與數據庫中的帶有時間的數據作比較
public static String getNextDay(String dateStr){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date ;
try {
date = formatter.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE,1);//把日期往後增加一天.正整數1往後推一天,-1獲得前一天
date=calendar.getTime(); //獲得傳入時間的後一天
return formatter.format(date);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
執行結果(可以結合上面判斷是否是正確的時間格式方法加強驗證效果):
此處沒有驗證傳入的日期是否是正常的日期,若傳入2019-02-29的話,會得到2019-03-02,所以,加強規範與邏輯,最好加上上面的時期匹配驗證