正規表示式 日期匹配 閏年平年
需要對日期進行乙個正規表示式匹配,想要找出乙個能夠匹配所有情況的正規表示式。
網上這篇部落格【】說得挺不錯的,大家可以借鑑參考。
年份主要是有平年和閏年之別,平年有365天,閏年有366天。
為什麼平年有365天和閏年有366天,而不是其他數字?
(1)首先,地球繞太陽公轉一周的時間長度稱為【一回歸年】。一回歸年換算成時間長度就是365天5時48分46秒,即365.02422天。為了方便,就取整數365天作為平年的天數。這裡就說明了數字的**。
(2)平年一年有365日,比一回歸年短0.2422日,四年共短0.9688日(約等於1),所以每4年增加1日,這一年有366日,就是閏年這裡就解釋了數字的**。
(3)閏年定義:上面說到每4年增加1日,這年有366天就是閏年。但每4年增加1日,這樣年份天數比4個回歸年又多0.0312日,400年後將多3.12日,故在400年中少設3個閏年,也就是在400年中只設97個閏年(如果按照原來每4年就有乙個閏年的計算方式,則400年就有100個閏年),這樣公曆年的平均長度與回歸年就相近似了。由此規定:年份是整百數的必須是400的倍數才是閏年,例如2023年不是閏年,2023年是閏年。
由此可知,4個年份數字(yyyy)滿足【能被400整除】或【被4整除且不能被100整除】兩個條件之一的,那一年就是閏年。其他年份就是平年。
常見的合法日期時間在乙個有效範圍內,這裡我們取【2023年01月01日 00時00分00秒】到【2023年12月31日 23時59分59秒】。
(1)所有年份是從0001到9999,要注意不能出現四個數字同時為0的情況,即不能出現2023年,這是非法的年份數字。乙個數字可以用\d或[0-9]表示。
所有年份正規表示式:
[0-9][1-9]|[0-9][1-9][0-9]|[0-9][1-9][0-9]|[1-9][0-9]
(2)閏年
根據閏年的定義將閏年分為兩類:
([0-9])(0[48]|[2468][048]|[13579][26])
(0[48]|[2468][048]|[13579][26])00
日期主要就是每個月的天數不同,比較特殊的就是2月,平年2月28天,閏年2月有29天。其他月份在平年和閏年沒有區別。
(1)月份為 1, 3, 5, 7, 8, 10, 12,天數範圍為 01 - 31,正規表示式為:
(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])
(2)月份為 4, 6, 9, 11,天數範圍為 01-30,正規表示式為:
(0[469]|11)-(0[1-9]|[12][0-9]|30)
(3)月份為 2,平年時的正規表示式為:
02-(0[1-9]|[1][0-9]|2[0-8])
閏年時只要特地匹配29日那天即可,因為其他的日子都可以在平年的表示式裡面匹配到,故為:
02-29
^((([0-9])(0[48]|[2468][048]|[13579][26])) #閏年,能被4整除但不能被100整除
|((0[48]|[2468][048]|[13579][26])00) #閏年,能被400整除
-02-29) #匹配閏年2月29日這一天。如果不是這一天,則由下面式子繼續匹配驗證。
|([0-9][1-9]|[0-9][1-9][0-9]|[0-9][1-9][0-9]|[1-9][0-9]) #平年(0001-9999)
-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])) #月日,1、3、5、7、8、10、12月有31天
|((0[469]|11)-(0[1-9]|[12][0-9]|30)) #月日,4、6、9、11月有30天
|(02-(0[1-9]|[1][0-9]|2[0-8]))) #平年2月只有28天,月日表示為【02-01至02-28】
ps:如果還有加上時間的驗證,那麼就在上面日期的基礎上加上【hh:mm:ss】的考慮。小時分為【00-12】或【00-23】兩種情況,時間和分鐘都是【00-59】。
參考文章:
正規表示式 日期
1 日期範圍 datetime 值型別表示值範圍在公元 紀元 0001 年 1 月 1 日午夜 12 00 00 到公元 c.e.9999 年 12 月 31 日晚上 11 59 59 之間的日期和時間。2 閏年 關於公曆閏年是這樣規定的 地球繞太陽公轉一周叫做一回歸年,一回歸年長365日5時48分...
日期正規表示式
判斷閏年的規則 1 能被400整除 2 能被4整除不能被100整除 日期正規表示式的構建思想 平年365天,閏年366天,只有在閏年的時候,2月有29天,其餘年份,2月總是只有28天,而其餘月份是的天數是一樣的。那麼,只需要對所有的年份 包括閏年 構建出2月只有28天 其餘月份正常表示 的正規表示式...
日期的正規表示式
public static void datecheck 02468 048 13579 26 s 0?13578 1 02 s 0?1 9 1 2 0 9 3 01 0?469 11 s 0?1 9 1 2 0 9 30 0?2 s 0?1 9 1 2 0 9 d 02468 12 35679 1...