最近在工作中需要用到对"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
相关推荐
* "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...
"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非常愿意和您成为工作伙伴。...yyyyMM、yyyyMMdd),二次选择后控件存在的异常问题修复日期时间选择器(datetime)开启范围选择时,选择当天未校验“结束时间超出开始时间”的问题
修复自定义无符号分割的日期格式(如 yyyyMM、yyyyMMdd),二次选择后控件存在的异常问题 修复日期时间选择器(datetime)开启范围选择时,选择当天未校验“结束时间超出开始时间”的问题 laydate网页日期控件截图
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。 日期正则表达式的构建可以按照规则分析的方法进行。先把不相关的需求拆分开,分别写...
2. **日期格式转换**:将日期格式`yyyy-MM-dd`转换为`yyyymmdd`,便于比较日期的大小,这对于日期相关的业务逻辑很有用。 3. **非空验证**:检查输入控件是否为空,如果为空,则弹出提示信息,确保用户提供了必要...
虽然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还支持多种日期数据格式,如'YYYY-MM-DD','YY/MM/DD','DD-MON-RRRR'等。根据需要,你可以使用 `to_date()` 函数将字符串转换为日期,或者使用 `to_char()` 函数将日期转换为指定格式的...
本文将对SQL Server中的日期格式转换进行总结,并详细解释每种格式的特点及其应用场景。 #### 一、基本日期时间格式转换(0-25) SQL Server提供了多种数字代码用于日期时间的格式化输出。以下是从0到25的日期格式...
这个函数首先检查身份证号码的长度,然后使用`slice`方法截取出生日期部分,并将其格式化为"YYYY年MM月DD日"的形式。 对于性别,我们可以通过判断顺序码的奇偶性来确定。以下是一个获取性别的函数: ```javascript...
常见的日期格式包括yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd和yyyy.MM.dd等。不同的日期格式需要用不同的正则表达式来匹配。 在构建日期正则表达式时,通常需要进行规则分析。可以根据日期天数是否与年份有关,将日期分为...
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位,奇数表示男性,...
例如,可以输出为`YYYY-MM-DD`、`YYYY.MM.DD`或`YYYYMMDD`等形式。 #### Shell脚本实现 接下来,我们将展示具体的Shell脚本实现过程。该脚本接收两个参数作为日期范围的边界,并可选地接收第三个参数指定日期之间...