一、先说一下年月日(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. Java基础之this关键字的作用

    this关键字主要存在三种应用 1.this调用本类中的属性,也就是说调用类中的成员变量: 2.this调用本类中的其他方法: 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行,否则会 ...

  2. 一张图看懂CSS cascade, specific, importance, inheritance

    http://www.w3.org/TR/CSS21/cascade.html#inheritance http://www.w3.org/TR/CSS21/cascade.html#cascade ...

  3. [翻译] NimbusKit

    注意:NimbusKit 是Github上iOS部分开源库排名前20中的一员. http://nimbuskit.info/ https://github.com/jverkoey/nimbus ht ...

  4. The categories of Reinforcement Learning 强化学习分类

    RL分为三大类: (1)通过行为的价值来选取特定行为的方法,具体 包括使用表格学习的 q learning, sarsa, 使用神经网络学习的 deep q network: (2)直接输出行为的 p ...

  5. Appium的安装-Mac平台(命令行 & dmg)

    其实Appium的安装方式主要有两种: 1)自己安装配置nodejs的环境,然后通过npm进行appium的安装 2)直接下载官网提供的dmg进行安装,dmg里面已经有nodejs的环境和appium ...

  6. 奇葩拿shell + 提权wind08r2奇葩拿shell + 提权wind08r2戏

    0x01 小隐拿站篇 某省还是市级还是县级的空防部 先来刺探目录,拿起御剑, 啪啪啪  (鼓掌)后台出来了   试试弱口令 擦  需要管理员验证码,这个咋玩????这个注入都不用找了,就算注射出账号密 ...

  7. python UI自动化实战记录六:页面1用例编写

    使用python自带的unittest测试框架,用例继承自unittest.TestCase类. 1 引入接口类和页面类 2 setUp函数中打开页面,定义接口对象 3 tearDown函数中关闭页面 ...

  8. PHP面向对象(OOP)编程入门教程链接

    PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...

  9. jquery 判断元素可见性

    $(".more_list").is(":visible") $(".more_list").is(":hidden")

  10. UVALive 4025 Color Squares(BFS)

    题目链接:UVALive 4025 Color Squares 按题意要求放带有颜色的块,求达到w分的最少步数. //yy:哇,看别人存下整个棋盘的状态来做,我什么都不想说了,不知道下午自己写了些什么 ...