使用正则表达式校验时间,精确到秒,包括年月日时分秒,14位格式精确校验,正则表达式精确校验时间

title :使用正则表达式校验时间,精确到秒,包括年月日时分秒,14位格式精确校验,正则表达式精确校验时间

今天做项目的时候遇到了校验日期的需求;
要求:精确校验14位的时间格式:yyyyMMddHHmmss,e.g.:20161213232255

要求时间绝对存在,举几个不存在的例子.1月32号,2月30日,24时,4点60分,等等。

说白了就是时间绝对存在而且考虑到平年2月28天,闰年2月29天等等。


为了综合考虑各种格式的时间,我做了以下精确分解,综合考虑:


part_1:时间格式:yyyyMMddHHmmss.例如:20161213232255

正则表达式为:

String timeRegex = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";

测试代码:

public void test() {
		// 不带‘-’或‘:’或‘ ’
		// 不能带杠,冒号,空格,而且必须14位:e.g : 20161213164858是合法的;
		// 这个是超级精确的校验
		String timeRegex = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";
		boolean b_2 = Pattern.matches(timeRegex, "20200229164859");
		System.out.println("timeRex : mathcesl : " + b_2);
	}


part_2:精确到日即可,即年月日,格式:yyyyMMdd,例如:20161213

正则表达式为:

String yyyyMMdd_Regex_2 = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12]

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值