其他分享
首页 > 其他分享> > 2021-01-15

2021-01-15

作者:互联网

在java商业项目中,时间校验非常重要,以下是通过JAVA正则表达式去校验时间的格式、值是否有效(只校验2000年到当前时间的值)。

正则表达式
// 时间格式
static String dateFormat = “^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}”;

// 平年年月日
static String noLeapYearDate = "^(((2\\d{3})-(0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[01]))|" +
                                "((2\\d{3})-(0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30))|" +
                                "((2\\d{3})-(02)-(0[1-9]|1[0-9]|2[0-8])))";

// 闰年年月日
static String leapYearDate = "^(((2\\d{3})-(0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[01]))|" +
                              "((2\\d{3})-(0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30))|" +
                              "((2\\d{3})-(02)-(0[1-9]|1[0-9]|2[0-9])))";

// 时分秒
static String hourMinSecondFormat = "^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])";

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
校验方法
private static boolean checkDate(String strDate) {
// 非空校验
if (null == strDate || “”.equals(strDate)) {
return false;
}
// 长度校验
if (strDate.trim().length() != 19) {
return false;
}
// 格式校验
if (!checkDateFormat(strDate)) {
return false;
}
// 值校验
if (!checkDateData(strDate)) {
return false;
}
return true;
}

private static boolean checkDateFormat(String strDate) {
    Pattern pattern = Pattern.compile(dateFormat);
    if(pattern.matcher(strDate).matches()){
        return true;
    }
    return false;
}

private static boolean checkDateData(String strDate) {
    String year = strDate.substring(0, 4);
    String yearMonthDay = strDate.substring(0, 10);
    String HourMinSecond = strDate.substring(11, 19);
    // 校验年月日
    if (!checkYearMonthDay(yearMonthDay, Integer.parseInt(year))) {
        return false;
    }
    // 校验时分秒
    if (!checkHourMinSecond(HourMinSecond)) {
        return false;
    }
    // 时间时效校验
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = null;
    Date currentDate = new Date();
    try {
        date = formatter.parse(strDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (currentDate.before(date)) {
        return false;
    }
    return true;
}

private static boolean checkYearMonthDay(String date, int year) {
    Pattern noLeapPattern = Pattern.compile(noLeapYearDate);
    Pattern leapYearPattern = Pattern.compile(leapYearDate);
    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
        if(!leapYearPattern.matcher(date).matches()){
            return false;
        }
    }else {
        if(!noLeapPattern.matcher(date).matches()){
            return false;
        }
    }
    return true;
}

private static boolean checkHourMinSecond(String date) {
    Pattern timePattern = Pattern.compile(hourMinSecondFormat);
    if(timePattern.matcher(date).matches()){
        return true;
    }
    return false;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
校验测试代码与结果
public static void main(String[] args) {
String date1 = “2020-01-31 23:17:00”;
String date2 = “2019-02-28 19:10:00”;
String date3 = “2019-02-29 19:10:00”;
// DateTools类名
System.out.println("date1 : "+DateTools.checkDate(date1));
System.out.println("date2 : "+DateTools.checkDate(date2));
System.out.println("date3 : "+DateTools.checkDate(date3));
}

标签:01,return,String,校验,strDate,static,2021,15,false
来源: https://blog.csdn.net/qq_38708916/article/details/112677335