java嚴格驗證日期是否正確的代碼

 1 package com.xxxx.util;  2 
 3 /**
 4  * 輸入日期 並進行驗證格式是否正確  5  */
 6 public class FDate {  7 
 8     public static void main(String[] args) {  9         System.out.println(validate("2018-06-30t")); 10  } 11     
12     /**
13  * 檢查是不是閏年 14  * 15  * @param year 16  * @return
17      */
18     public static boolean run(int year) { 19         if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {// 是閏年 20 // System.out.print(year + "是閏年! ");
21             return true; 22         } else { 23             return false; 24  } 25  } 26 
27     public static boolean validate(String dateStr) { 28         String msg =""; 29         String[] data = new String[3]; 30         boolean flag = true; // 若不符合規則將值改成false
31         String year = "[0-9]{4}";//
32         String month = "[0-9]||0[0-9]||1[12]";//
33         String day = "[0-9]||[0-2][0-9]||3[01]";//
34         int YEAR = 0; 35         String str = dateStr;// 輸入的字符串
36         data = str.split("[-/.+]"); 37         // 最基本的檢查格式 begin
38         if (!data[0].matches(year)) { 39             msg = "年不對"; 40             flag = false; 41  } 42         if (!data[1].matches(month)) { 43             msg = "月不對"; 44             flag = false; 45  } 46         if (!data[2].matches(day)) { 47             msg = "日不對"; 48             flag = false; 49  } 50         // end
51         YEAR = Integer.valueOf(data[0]); 52         boolean run = run(YEAR);// run 爲true是閏年不然是 非閏年
53         if (run) {// 閏年
54             if (data[1].matches("0[2]||2")) {// 這裏是閏年的2月
55                 if (!data[2].matches("0[1-9]||[1-9]||1[0-9]||2[0-9]")) { 56                     flag = false; 57                     msg = "2月份的天數不對"; 58  } 59  } 60         } else {// 非閏年
61             if (data[1].matches("0[2]||2")) {// 這裏是平年的2月
62                 if (!data[2].matches("0[1-9]||[1-9]||1[0-9]||2[0-8]")) { 63                     flag = false; 64                     msg = "2月份的天數不對"; 65  } 66  } 67  } 68 
69         // 下面判斷除了2月份的大小月天數
70         if (data[1].matches("0[13578]||[13578]||1[02]")) {// 這裏是大月
71             if (!data[2].matches("0[1-9]||[1-9]||[12][0-9]||3[01]")) { 72                 flag = false; 73                 msg = data[2] + " 天數不對"; 74  } 75         } else if (data[1].matches("0[469]||[469]||11")) {// 這裏是小月
76             if (!data[2].matches("0[1-9]||[1-9]||[12][0-9]||30")) { 77                 flag = false; 78                 msg = data[2] + " 天數不對"; 79  } 80  } 81 
82         if (flag) { 83             msg = "日期格式正確"; 84  } 85         
86         return flag; 87  } 88 
89 }
相關文章
相關標籤/搜索