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
/**
* 判断日期
* @param date
* @return
*/
public static Map<String,Object> dateIsPass(String date) {
Map<String,Object> rsMap = new HashMap<String,Object>();
rsMap.put("format", false);
rsMap.put("msg", "日期格式不对。");
//年月日的正则表达式,此次没有理会2月份闰年
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)))$";
//开始判断,且符合正则表达式
if(date.matches(regex)) {
rsMap.put("format", true);
rsMap.put("msg", "日期格式正确。");
//分割截取0年份1月份2日
String[] dateSplit = date.split("-");
//判断输入的月份是否是二月,输入的是二月的话,还需要判断该年是否是闰年
if("02".equals(dateSplit[1]) || "2".equals(dateSplit[1])) {
int year = Integer.parseInt(dateSplit[0]);
// 不是闰年,需要判断日是否大于28
if (!(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) {
int day = Integer.parseInt(dateSplit[2]);
if(day > 28) {
rsMap.put("format", false);
rsMap.put("msg", year+"年2月不是闰年,只有28天!");
}
}
}
}
return rsMap;
}
第二种:先判断月份是否2月(再者就是闰年判断),后拼凑正则表达式,返回boolean
/**
* 判断日期
* @param date
* @return
*/
public static boolean dateIsPass2(String date) {
boolean flag = false;
int d = 8;
//分割截取0年份1月份2日
String[] dateSplit = date.split("-");
//判断输入的月份是否是二月,输入的是二月的话,还需要判断该年是否是闰年
if("02".equals(dateSplit[1]) || "2".equals(dateSplit[1])) {
int year = Integer.parseInt(dateSplit[0]);
// 不是闰年,需要判断日是否大于28
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
d = 9;
}
}
//年月日的正则表达式,此次没有理会2月份闰年
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)";
//开始判断,且符合正则表达式
if(date.matches(regex)) {
flag = true;
}
return flag;
}
JAVA中判断年月日格式是否正确(支持判断闰年的2月份)的更多相关文章
- Java中用正则表达式判断日期格式是否正确
1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...
- JS判断上传图片格式是否正确
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)
/** * 表单校验函数库 */ /** * 判断email格式是否正确 * @param $email */ function is_email($email) { return strlen($e ...
- JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson
java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...
- java中各种时间格式的转化
http://www.chinaitpower.com/A/2005-01-14/104881.html 使用java.util.Calendar返回间隔天数 static int g ...
- Java中的日期格式转化
package lianxi; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util ...
- Duilib中Webbrowser事件完善使其支持判断页面加载完毕
在多iframe的页面中,需要结合DISPID_DOCUMENTCOMPLETE和DISPID_NAVIGATECOMPLETE2两个事件判断页面是否加载完毕,而duilib中没有提供对DISPID_ ...
- JAVA中Sql时间格式与util时间格式转换
关于时间格式转化: java.util.Date 与 java.sql.Date 互换 sql是子类 字符串转化成java.util.Date SimpleDateFormat date =n ...
- Java中关于Integer, String 类型变量 == 与 equals 判断的坑
== 与 equals()的联系: ==: 我们都知道Java中 == 对用于基础数据类型(byte, short, int, long, float, double, boolean, char)判 ...
随机推荐
- Windows下sc create命令行添加/创建/修改服务
添加服务: sc create TestService binpath= "D:\TestApp\TestService.exe" 注意:所有的等号和值之间需要一个空格(等号前不要 ...
- 如何判断单链表是否存在环 & 判断两链表是否相交
给定一个单链表,只给出头指针h: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针sl ...
- percona toolkit之slave工具
1:pt-slave-find ,主要是查找MySQL的层级,其实我感觉这个用处不是很大,因为层级比较多架构本身就很少,查看从库的话一般情况我们可以通过show slave hosts查看(不过不能显 ...
- 如何申请免费域名证书,以及在IIS上绑定
1.前往https://freessl.cn/ 申请域名 证书 2.输入邮箱后,点击创建.文件验证方式 会自动下载一个压缩包,把该压缩包放到所申请的域名首层下.(不要重复创建,需要3,5分钟.最好手动 ...
- 实验 MPLS LDP配置
实验 MPLS LDP配置 一.学习目的 掌握启用和关闭MPLS的方法 掌握启用和关闭MPLS LDP配置方法 掌握使用MPLS LDP配置LSP的方法 二.拓扑图 三.场景 你是公司的网管员,公司的 ...
- 使用MongoDB血泪般的经验教训
故事背景,天书世界,现在项目已经属于成熟维护期,是时候总结一下当时的想法 第一个问题,为什么使用mongodb? 数据库对于游戏项目本身的要求与传统业务系统差异较大,所以nosql的弱结构性对于我那是 ...
- June 20th 2017 Week 25th Tuesday
Care and diligence bring luck. 谨慎和勤奋,带来好运气. In my opinion, care and diligence may just gurantee us a ...
- Android(java)学习笔记211:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
- 代码注释模板(把内容保存为xml文件,导入eclipse中即可)
<?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...
- WebSphere Studio Application Developer 5.0 优化设置
公司有一个项目需要用到WebSphere Studio Application Developer 5.0 的开发环境,这个环境比较老,而且只能用JDK1.4. 项目开发的时候 总是报错: JVM t ...