對時間為“yyyyMMdd”格式的時間資料進行校驗,判斷其合法性
package org.asyware.insurance.util;
/**
*
* @author zl
* date 2018/08/09
*
*/
public class DateUtil {
/**
* 判斷引數的格式是否為“yyyyMMdd”格式的合法日期字串
*
* @author Liang.Wang
* @since 02/24/15
* @param str
* @return true/false
*/
public static boolean isValidDate(String str) {
int a=1900;
int a1=2200;
int a2=0;
int a3=4;
int b=100;
int b1=400;
int b2=2;
int b3=28;
int c=29;
int c1=10;
int c2=11;
int c3=12;
int d=31;
int d1=8;
try {
if (str != null && !str.equals("")) {
if (str.length() == d1) {
// 閏年標誌
boolean isLeapYear = false;
String year = str.substring(0, 4);
String month = str.substring(4, 6);
String day = str.substring(6, 8);
int vYear = Integer.parseInt(year);
// 判斷年份是否合法
if (vYear < a || vYear > a1) {
return false;
}
// 判斷是否為閏年
if (vYear % a3 == 0 && vYear % b != 0 ) {
isLeapYear = true;
}else if(vYear % b1 == 0){
isLeapYear = true;
}
// 1.判斷月份
if (month.startsWith(String.valueOf(a2))) {
String units4Month = month.substring(1, 2);
int vUnits4Month = Integer.parseInt(units4Month);
if (vUnits4Month == 0) {
return false;
}
if (vUnits4Month == b2) {
// 獲取2月的天數
int vDays4February = Integer.parseInt(day);
if (isLeapYear) {
if (vDays4February > c) {
return false;}
} else {
if (vDays4February > b3){
return false;}
}
}
} else {
// 2.判斷非0打頭的月份是否合法
int vMonth = Integer.parseInt(month);
if (vMonth != c1 && vMonth != c2 && vMonth != c3) {
return false;}}
// 1.判斷日期
if (day.startsWith(String.valueOf(a2))) {
String units4Day = day.substring(1, 2);
int vUnits4Day = Integer.parseInt(units4Day);
if (vUnits4Day == 0) {
return false;}
} else {
// 2.判斷非0打頭的日期是否合法
int vDay = Integer.parseInt(day);
if (vDay < c1 || vDay > d) {
return false;}}
return true;
} else {
return false;
}
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;}}
}