JAVA中判斷年月日格式是否正確(支持判斷閏年的2月份)


一、先說一下年月日(yyyy-MM-dd)正則表達式:

1.年月日正則表達式:
^((19|20)[0-9]{2})-((0?2-((0?[1-9])|([1-2][0-9])))|(0?(1|3|5|7|8|10|12)-((0?[1-9])|([1-2][0-9])|(3[0-1])))|(0?(4|6|9|11)-((0?[1-9])|([1-2][0-9])|30)))$
或者這樣,2月中的9可以變化
^((19|20)[0-9]{2})-((0?2-((0?[1-9])|(1[0-9]|2[0-9])))|(0?(1|3|5|7|8|10|12)-((0?[1-9])|([1-2][0-9])|(3[0-1])))|(0?(4|6|9|11)-((0?[1-9])|([1-2][0-9])|30)))$

下面就是JAVA判斷年月日格式是否正確的兩種方法(這兩種方法實現類似

第一種:先正則判斷,后判斷月份是否2月(再者就是閏年判斷),返回Map

 1     /**
 2      * 判斷日期
 3      * @param date
 4      * @return
 5      */
 6     public static Map<String,Object> dateIsPass(String date) {
 7         Map<String,Object> rsMap = new HashMap<String,Object>();
 8         rsMap.put("format", false);
 9         rsMap.put("msg", "日期格式不對。");
10         //年月日的正則表達式,此次沒有理會2月份閏年
11         String regex  = "^((19|20)[0-9]{2})-((0?2-((0?[1-9])|([1-2][0-9])))|(0?(1|3|5|7|8|10|12)-((0?[1-9])|([1-2][0-9])|(3[0-1])))|(0?(4|6|9|11)-((0?[1-9])|([1-2][0-9])|30)))$";
12         //開始判斷,且符合正則表達式
13         if(date.matches(regex)) {
14             rsMap.put("format", true);
15             rsMap.put("msg", "日期格式正確。");
16             //分割截取0年份1月份2日
17             String[] dateSplit = date.split("-");
18             //判斷輸入的月份是否是二月,輸入的是二月的話,還需要判斷該年是否是閏年
19             if("02".equals(dateSplit[1]) || "2".equals(dateSplit[1])) {
20                 int year = Integer.parseInt(dateSplit[0]);
21                 // 不是閏年,需要判斷日是否大於28
22                 if (!(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) {
23                     int day = Integer.parseInt(dateSplit[2]);
24                     if(day > 28) {
25                         rsMap.put("format", false);
26                         rsMap.put("msg", year+"年2月不是閏年,只有28天!");
27                     }
28                 }
29             }
30         }
31         return rsMap;
32     }

 

 

第二種:先判斷月份是否2月(再者就是閏年判斷),后拼湊正則表達式,返回boolean

 1     /**
 2      * 判斷日期
 3      * @param date
 4      * @return
 5      */
 6     public static boolean dateIsPass2(String date) {
 7         boolean flag = false;
 8         int d = 8;
 9         //分割截取0年份1月份2日
10         String[] dateSplit = date.split("-");
11         //判斷輸入的月份是否是二月,輸入的是二月的話,還需要判斷該年是否是閏年
12         if("02".equals(dateSplit[1]) || "2".equals(dateSplit[1])) {
13             int year = Integer.parseInt(dateSplit[0]);
14             // 不是閏年,需要判斷日是否大於28
15             if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
16                 d = 9;
17             }
18         }
19         //年月日的正則表達式,此次沒有理會2月份閏年
20         String regex = "^((19|20)[0-9]{2})-((0?2-((0?[1-9])|(1[0-9]|2[0-"+d+"])))|(0?(1|3|5|7|8|10|12)-((0?[1-9])|([1-2][0-9])|(3[0-1])))|(0?(4|6|9|11)-((0?[1-9])|([1-2][0-9])|30)";
21         //開始判斷,且符合正則表達式
22         if(date.matches(regex)) {
23             flag = true;
24         }
25         return flag;
26     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM