欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-25 14:46:07
...

        最近在工作中需要用到对"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