1. 程式人生 > >對時間為“yyyyMMdd”格式的時間資料進行校驗,判斷其合法性

對時間為“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;}}
}