Java日期校验

 数据校验--日期格式校验(日期格式是否合法,日期是否存在)

		/**
		 * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串
		 * 
		 * @author  xzh
		 * @Date 2020/1/21
		 * @param str
		 * @return true/false
		 */
		public static boolean isValidDate(String str) {
			try {
				if (str != null && !str.equals("")) {
					if (str.length() == 8) {
						// 闰年标志
						boolean isLeapYear = false;
						String year = str.substring(0, 4);
						String month = str.substring(4, 6);
						String day = str.substring(6, 8);
						int vYear = Integer.parseInt(year);
						// 判断年份是否合法
						if (vYear < 1900 || vYear > 2200) {
							return false;
						}
						// 判断是否为闰年
						if (vYear % 4 == 0 && vYear % 100 != 0 || vYear % 400 == 0) {
							isLeapYear = true;
						}
						// 判断月份
						// 1.判断月份
						if (month.startsWith("0")) {
							String units4Month = month.substring(1, 2);
							int vUnits4Month = Integer.parseInt(units4Month);
							if (vUnits4Month == 0) {
								return false;
							}
							if (vUnits4Month == 2) {
								// 获取2月的天数
								int vDays4February = Integer.parseInt(day);
								if (isLeapYear) {
									if (vDays4February > 29)
										return false;
								} else {
									if (vDays4February > 28)
										return false;
								}
	 
							}
						} else {
							// 2.判断非0打头的月份是否合法
							int vMonth = Integer.parseInt(month);
							if (vMonth != 10 && vMonth != 11 && vMonth != 12) {
								return false;
							}
						}
						// 判断日期
						if (day.startsWith("0")) {
							String units4Day = day.substring(1, 2);
							int vUnits4Day = Integer.parseInt(units4Day);
							if (vUnits4Day == 0) {
								return false;
							}
						} else {
							// 2.判断非0打头的日期是否合法
							int vDay = Integer.parseInt(day);
							if (vDay < 10 || vDay > 31) {
								return false;
							}
						}
						return true;
					} else {
						return false;
					}
				} else {
					return false;
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			}
	 
		}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值