`
Hundun_Wu
  • 浏览: 2299 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

对"yyyyMM"与"yyyyMMdd"类日期的校验

阅读更多

        最近在工作中需要用到对"yyyyMM"类的日期校验,比如"201501"就表示2015年1月,然后如果是"201513",“2015qew”等这些这是非法的输入。

       之前使用了一直方式校验,使用SimpleDateFormat类的parse()方法,该方法会抛出ParseException异常,如果parse不符合format,就会抛出该异常。但后来发现了一个问题,就是这种方法对于"yyyy-MM","yyyy-MM-dd"类格式还可用,但到了"yyyyMM"类的就会出现问题,下面用代码说明:

public class Test {
   private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM") ;
	
   public static void main(String[] args) {
	   String testCase1 = "201501";
	   String testCase2 = "201513234";
	   String testCase3 = "2015qew";
	   try {
		  sdf.parse(testCase1) ;
		  System.out.println("'"+testCase1+"'没有发生异常");
		  sdf.parse(testCase2) ;
		  System.out.println("'"+testCase2+"'没有发生异常");
		  sdf.parse(testCase3) ;
		  System.out.println("'"+testCase3+"'没有发生异常");
	   } catch (ParseException e) {
		  System.out.println("发生了异常");
	   }
   }
}

 

 运行结果如下:

'201501'没有发生异常

'201513234'没有发生异常

发生了异常

 

从上面可以看出,"201513234"不符合"yyyyMM"形式,但依然没出现异常,在"201501"才出现异常,因此这种方式判断日期格式不安全。

 

为此,我们可以使用下面一个方法:

 /**
    * 判断时间格式是否是"yyyyMM"或者"yyyyMMdd"
    * @param date   字符串类型时间
    * @param format 时间格式
    * @return
    */
   public static boolean isDate(String date , String format){
       try {
           SimpleDateFormat sdf = new SimpleDateFormat(format);
           Date d =  sdf.parse(date); //把字符串转化为日期(可以过滤掉奇怪格式的日期格式)
           String newDate = sdf.format(d);//日期转化为字符

           /*
            *1,把字符串的日期转化为Date类型的日期。
            *2,把Date类型日期转化为字符串类型日期。
            *3,如果两者相等,说明日期格式符合要求
            */
           if(null != newDate && newDate.equals(date)){
               return true ;
           }else {
               return false ;
           }
       } catch (ParseException e) {
           //出现异常,说明时间格式有误
           return false ;
       }

   }

 测试:

 public static void main(String[] args) {
	   String testCase1 = "201501";
	   String testCase2 = "201513234";
	   String testCase3 = "2015qew";
	   
	   System.out.println(isDate(testCase1,"yyyyMM"));
	   System.out.println(isDate(testCase2,"yyyyMM"));
	   System.out.println(isDate(testCase3,"yyyyMM"));
	   
   }

 

运行结果:

true

false

 

false

 

分享到:
评论

相关推荐

    java代码验证日期格式正则表达式(包含闰年验证)带注释

    * "yyyyMM","yyyyMMdd","yyyyMMdd HH:mm:ss", * "yyyy-MM","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss" * "yyyy.MM","yyyy.MM.dd","yyyy.MM.dd HH:mm:ss" * "yyyy/MM","yyyy/MM/dd","yyyy/MM/dd HH:mm:ss" * "yyyy_MM...

    Java正则校验日期格式包括所有

    "yyyyMM","yyyyMMdd","yyyyMMdd HH:mm:ss", "yyyy-MM","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss" "yyyy.MM","yyyy.MM.dd","yyyy.MM.dd HH:mm:ss" "yyyy/MM","yyyy/MM/dd","yyyy/MM/dd HH:mm:ss" "yyyy_MM","yyyy_MM_dd",...

    laydate网页日期控件 v5.0.6

    你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴。...yyyyMM、yyyyMMdd),二次选择后控件存在的异常问题修复日期时间选择器(datetime)开启范围选择时,选择当天未校验“结束时间超出开始时间”的问题

    laydate网页日期控件 v5.0.6.zip

    修复自定义无符号分割的日期格式(如 yyyyMM、yyyyMMdd),二次选择后控件存在的异常问题 修复日期时间选择器(datetime)开启范围选择时,选择当天未校验“结束时间超出开始时间”的问题 laydate网页日期控件截图

    各类时间校验和检查的js

    17.将form中,日期文本对象转化为标准格式( from yyyymmdd to yyyy-mm-dd) DateObj2StandardFmt(date_obj) 18. 从合法身份证取生日 GetBirthdayFromID(id_value) 19. 从合法身份证取性别 GetGenderFromID(id_...

    日期正则表达式

    日期的格式根据不同的语言文化,日期的连字符会有所不同,通常有以下几种格式:yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd。 日期正则表达式的构建可以按照规则分析的方法进行。先把不相关的需求拆分开,分别写...

    常用js大全,javascript校验大全

    2. **日期格式转换**:将日期格式`yyyy-MM-dd`转换为`yyyymmdd`,便于比较日期的大小,这对于日期相关的业务逻辑很有用。 3. **非空验证**:检查输入控件是否为空,如果为空,则弹出提示信息,确保用户提供了必要...

    C# 最全的日期正则表达式,没有之一

    虽然C#提供了强大的日期处理库,例如`DateTime`和`Calendar`类,但在某些特定场景下,如需要对输入的文本进行日期格式的验证时,正则表达式则显得尤为重要。 #### 2. 日期的规则 ##### 2.1 日期的有效范围 - **...

    根据身份证号判断出生日期和性别

    Console.WriteLine("出生日期:" & personInfo.Birthday.ToString("yyyy-MM-dd")) Console.WriteLine("性别:" & personInfo.Gender) ``` 通过这种方式,我们可以方便地在VB.NET项目中处理身份证号码相关的个人信息...

    时间工具类

    获取YYYY-MM-DD HH:mm:ss格式 获取YYYY格式 获取YYYY-MM-DD格式 获取YYYYMMDD格式 日期比较,如果s>=e 返回true 否则返回false 格式化日期 根据参数格式化日期 校验日期是否合法 时间相减得到天数 得到n天之后的日期...

    验证日期的正则表达式及其注释(包含闰年验证)

    验证日期的正则表达式及其注释(包含闰年验证) 正则表达式是验证日期的重要工具,但是在验证日期时需要...这个日期正则表达式支持YYYY-MM-DD YYYY/MM/DD YYYY_MM_DD YYYY.MM.DD形式的日期,并且能够正确地验证闰年。

    oracle数据库中常用日期型函数 .pdf

    在处理日期和时间时,Oracle还支持多种日期数据格式,如'YYYY-MM-DD','YY/MM/DD','DD-MON-RRRR'等。根据需要,你可以使用 `to_date()` 函数将字符串转换为日期,或者使用 `to_char()` 函数将日期转换为指定格式的...

    sqlserver 日期格式总结

    本文将对SQL Server中的日期格式转换进行总结,并详细解释每种格式的特点及其应用场景。 #### 一、基本日期时间格式转换(0-25) SQL Server提供了多种数字代码用于日期时间的格式化输出。以下是从0到25的日期格式...

    js根据身份证号取日期和性别

    这个函数首先检查身份证号码的长度,然后使用`slice`方法截取出生日期部分,并将其格式化为"YYYY年MM月DD日"的形式。 对于性别,我们可以通过判断顺序码的奇偶性来确定。以下是一个获取性别的函数: ```javascript...

    正则应用之 日期正则表达式

    常见的日期格式包括yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd和yyyy.MM.dd等。不同的日期格式需要用不同的正则表达式来匹配。 在构建日期正则表达式时,通常需要进行规则分析。可以根据日期天数是否与年份有关,将日期分为...

    js脚本大全 js验证大全 压缩包

    1.3 将日期格式由yyyy-MM-dd,转换为yyyymmdd,以直接比较两个日 期的大小.. 4 1.4 判断字符串是否全部由数字组成. 5 1.5 判断字符串是否全部由字母组成. 6 1.6 对于月和日,如果前面有零,去除,如 01 变为 1 .. 6 ...

    公民身份证提取出生日期和性别函数

    根据给定的信息,本文将详细解释公民身份证号中如何提取出生日期和性别的知识点,并对提供的SQL函数进行解析。 ### 公民身份证号码结构 在中国,公民身份证号码由18位数字组成,其中包括了丰富的个人信息,如出生...

    根据身份证号自动输出相关信息(籍贯,出身日期,性别)

    通常,出生日期的格式为YYYYMMDD,因此可以通过简单的字符串截取和格式化,将其转换为人类可读的日期格式,如YYYY年MM月DD日,然后显示在“出生年月”输入框内。 性别信息位于身份证号码的第17位,奇数表示男性,...

    shell通过遍历输出两个日期范围内所有日期的方法

    例如,可以输出为`YYYY-MM-DD`、`YYYY.MM.DD`或`YYYYMMDD`等形式。 #### Shell脚本实现 接下来,我们将展示具体的Shell脚本实现过程。该脚本接收两个参数作为日期范围的边界,并可选地接收第三个参数指定日期之间...

Global site tag (gtag.js) - Google Analytics