一、先说一下年月日(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月份)的更多相关文章

  1. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

  2. JS判断上传图片格式是否正确

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)

    /** * 表单校验函数库 */ /** * 判断email格式是否正确 * @param $email */ function is_email($email) { return strlen($e ...

  4. JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson

    java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...

  5. java中各种时间格式的转化

    http://www.chinaitpower.com/A/2005-01-14/104881.html 使用java.util.Calendar返回间隔天数         static int g ...

  6. Java中的日期格式转化

    package lianxi; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util ...

  7. Duilib中Webbrowser事件完善使其支持判断页面加载完毕

    在多iframe的页面中,需要结合DISPID_DOCUMENTCOMPLETE和DISPID_NAVIGATECOMPLETE2两个事件判断页面是否加载完毕,而duilib中没有提供对DISPID_ ...

  8. JAVA中Sql时间格式与util时间格式转换

    关于时间格式转化: java.util.Date 与 java.sql.Date 互换 sql是子类 字符串转化成java.util.Date     SimpleDateFormat date =n ...

  9. Java中关于Integer, String 类型变量 == 与 equals 判断的坑

    == 与 equals()的联系: ==: 我们都知道Java中 == 对用于基础数据类型(byte, short, int, long, float, double, boolean, char)判 ...

随机推荐

  1. Windows下sc create命令行添加/创建/修改服务

    添加服务: sc create TestService binpath= "D:\TestApp\TestService.exe" 注意:所有的等号和值之间需要一个空格(等号前不要 ...

  2. 如何判断单链表是否存在环 & 判断两链表是否相交

    给定一个单链表,只给出头指针h: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针sl ...

  3. percona toolkit之slave工具

    1:pt-slave-find ,主要是查找MySQL的层级,其实我感觉这个用处不是很大,因为层级比较多架构本身就很少,查看从库的话一般情况我们可以通过show slave hosts查看(不过不能显 ...

  4. 如何申请免费域名证书,以及在IIS上绑定

    1.前往https://freessl.cn/ 申请域名 证书 2.输入邮箱后,点击创建.文件验证方式 会自动下载一个压缩包,把该压缩包放到所申请的域名首层下.(不要重复创建,需要3,5分钟.最好手动 ...

  5. 实验 MPLS LDP配置

    实验 MPLS LDP配置 一.学习目的 掌握启用和关闭MPLS的方法 掌握启用和关闭MPLS LDP配置方法 掌握使用MPLS LDP配置LSP的方法 二.拓扑图 三.场景 你是公司的网管员,公司的 ...

  6. 使用MongoDB血泪般的经验教训

    故事背景,天书世界,现在项目已经属于成熟维护期,是时候总结一下当时的想法 第一个问题,为什么使用mongodb? 数据库对于游戏项目本身的要求与传统业务系统差异较大,所以nosql的弱结构性对于我那是 ...

  7. June 20th 2017 Week 25th Tuesday

    Care and diligence bring luck. 谨慎和勤奋,带来好运气. In my opinion, care and diligence may just gurantee us a ...

  8. Android(java)学习笔记211:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  9. 代码注释模板(把内容保存为xml文件,导入eclipse中即可)

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...

  10. WebSphere Studio Application Developer 5.0 优化设置

    公司有一个项目需要用到WebSphere Studio Application Developer 5.0 的开发环境,这个环境比较老,而且只能用JDK1.4. 项目开发的时候 总是报错: JVM t ...