`
chenhao_yssy
  • 浏览: 32979 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Java验证是否是标准日期

 
阅读更多

在WEB方面,一般来说从前台传来的日期都是经过验证的(日历控件、JS验证等),所以一般就可以直接使用的,在后台就不需要再做验证了。可是,今天我在项目就遇到这么一个问题,前台传来的日期是上传一个XLS,然后从XLS里面读出来的,所以在前台方面根本无法做验证,只能在后台做验证,我本来直接用SimpleDateFormat转换下,然后我Try catch就可以了。然后在catch里面直接把验证错误信息返回给前台,结果没想到QA在测试的时候,随意输入了一个(13-32-2012),然后SimpleDateFormat.parse()的时候,把13-32-2012(MM-dd-yyyy)转换成了02-01-2013,我本以为它会报错的,然后我可以直接把验证错误信息传回给前台,结果竟然没有报错!有图有真相:


我捉鸡啊,然后我上网查啊查的,都没有找到原因,倒是有几个Java正则的验证,但是写的像梵文一样的,好长啊,而且几个验证都不一样,感觉不靠谱,还是决定回头来翻看API,看了下SimpleDateFormat类的API也木有看出个啥,顿时有种万念俱灰的感觉,这时候看到SimpleDateFormat有个父类DateFormat,就当再看看说明吧,然后在看DateFormat的API的时候,突然发现DateFormat有个方法setLenient



 顿时感觉有那么一点点靠谱的感觉,然后就抱着试试看的态度试了下,擦,果然靠谱!

只要你把setLenient()里面的参数设成false,那么你当前new出来的这个SimpleDateFormat或者DateFormat就会自动帮你验证你parse里的日期字符串是否符合规范。注意:它默认是宽松的,就是isLenient == true! 
指定日期/时间解释是否是宽松的。对于宽松的解释,可以将诸如 "February 942, 1996" 之类的日期视为等同于 1996 年 1 月 1 日后的第 941 天。而对于严格的(non-lenient)解释,这样的日期会导致抛出异常。默认情况下是宽松的。(来自API解释,比我那个什么13减12解释的简单明了多了 - -!)
所以我想做的事,现在一句代码就解决了,SimpleDateFormat.setLenient(false)就可以了!虽然就一句代码的事,但是感觉这个毕竟不太常用,也许有些同事像我一样并不太了解这一块,所以写出来给大家一起分享下哈。

现在回过头来想想,通过这么一个小小的问题我总结出来两点小经验:
1. 开发的时候遇到不明白的地方,首先就应该翻开API,API永远是你最可靠的助手。
2. 写代码的时候不要太自信,自信需要来源于自身强大的实力,而我没有。。。(像我一开始连那个Lenient原理都不明白,自以为是会Try catch的,结果被QA测出来了,惭愧。)

  • 大小: 7.9 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

    java中验证脚本组件

    5. **一致性**:统一的数据验证规则可以确保整个系统中数据的一致性,避免因不同模块间验证标准不一导致的问题。 在实现Java验证脚本时,可以使用以下技术: - **内置库**:Java提供了多种内置库进行数据验证,如...

    纯JAVA计算日期的农历节日、公历节日代码!

    通常会包含单元测试,如`@Test`注解的方法,用来验证你的节日判断代码是否正确。 7. **性能优化**: - 如果节日数量大,可以考虑使用哈希表或者数据结构预计算并存储结果,提高查询效率。 - 对于农历转换,理解并...

    JAVA 史上最牛的日期控件

    这表明该控件不仅具有标准的日期选择功能,可能还提供了高级特性,如年份滚动、月份导航等。 描述中提到“最牛逼的日期控件有Main方法”,这暗示着这是一个独立运行的程序,可能包含一个演示或者测试用例,用户可以...

    身份证验证系统 java

    在Java编程中,我们可以使用正则表达式进行初步的格式验证,确保输入的身份证号码符合18位数字的标准格式。接着,可以通过计算校验码并对比实际输入的校验码来进一步验证身份证的合法性。如果需要联网获取个人信息,...

    验证EXCEL导入模板是否符合标准

    本话题主要探讨如何使用C#编程语言来验证Excel导入模板是否符合预设的标准,包括文件名、工作表名和字段名称的验证。 首先,我们需要理解验证的目标。一个标准的Excel导入模板应具有明确的命名规则,例如文件名可能...

    java日期控件

    Java日期控件是一种在Java应用程序或Web应用中用于用户交互,选择或显示日期的组件。在Java中,日期控件通常是由Swing、JavaFX或者第三方库如JCalendar、DatePicker等提供。这些控件设计目的是为了提高用户体验,...

    Java日期选择控件完整源代码

    - **JavaFX**:JavaFX的`DatePicker`控件是现代Java GUI开发中的标准日期选择器,具有直观的用户界面和强大的功能。 2. **自定义日期选择控件**: - 自定义控件可能包含事件监听器,例如`ActionListener`或`...

    java日期选择插件datepicker.zip

    在Java开发中,日期和时间的处理是常见的需求,标准库中的`java.util.Date`和`java.time`包提供了基本的支持。然而,这些类库在用户交互方面并不直观,特别是在需要图形化界面时。因此,像"datepicker"这样的插件...

    java实现的18位身份证格式验证算法

    - 身份证号码中的出生日期是YYYYMMDD格式,需要将其转换为标准日期格式。Java中可以使用`SimpleDateFormat`类来完成这个转换,如`new SimpleDateFormat("yyyyMMdd").parse(idNumber.substring(6, 14))`。 4. **...

    java时间控件

    - **日期验证**:确保用户输入的日期合法,可以使用Java 8的`java.time`包进行日期格式的解析和校验。 - **国际化**:考虑到不同地区日期格式的不同,可以提供选项让用户选择日期格式。 - **用户体验**:设计友好的...

    日期时间选择对话框 (Java)

    4. **自定义行为**:可能需要实现自定义的验证逻辑,确保用户输入的有效性,比如检查日期和时间是否符合指定格式。 5. **界面更新**:当用户选择新的日期或时间后,更新对话框中的显示文本,反映最新的选择。 6. *...

    java身份证验证

    在Java编程语言中,身份证验证是一项常见的需求,用于确认输入的身份证号码是否符合中国的身份证号码规则。本项目提供了两个核心类:IdcardValidator和IdcardInfoExtractor,以及一个"身份证验证说明.txt"文档,用于...

    Java的日期格式化常用方法

    此外,`java.time.format.DateTimeFormatter`类中的`parse`方法可以将符合格式的字符串解析为日期时间对象,这对于数据输入验证或解析用户输入非常有用。 总之,Java中的日期格式化涉及`SimpleDateFormat`和`java....

    JAVA Swing日期选择控件datepicker的使用

    3. 添加事件监听器,当用户更改任何部分时,验证日期的合法性并更新组合组件的状态。 三、SwingX库的使用 另一个可选的库是SwingX,它提供了`JXDatePicker`组件。安装SwingX库后,使用方式与JCalendar类似,但提供...

    JAVA_API1.6文档(中文)

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    JAVA作业2_windows日期时钟.zip

    在本JAVA作业中,我们关注的是如何在Windows环境下创建一个具有日期和时钟显示功能的程序。这个程序设计包括四个主要区域:上方的菜单区、左侧的日期区、右侧的时钟区以及下方的功能键区。这个项目的目标是让学生...

    cron表达式校验,验证是否是正确的cron表达式,调用的主方法是function cronValidate(cronExpre

    cron表达式是Unix/Linux系统中用于设置定时任务的一种标准格式,它允许用户按照特定的时间间隔或特定时间点执行任务。在Java、JavaScript等编程语言中,我们也可以利用cron表达式来实现定时任务的功能。`...

    一个JAVA应用程序的 日期控件

    在实际项目中,日期控件往往与其他功能结合使用,比如保存用户选择的日期到数据库、进行日期相关的计算或验证等。因此,了解和熟练使用这些控件对于提升Java GUI应用的用户体验至关重要。在开发过程中,开发者还需要...

    Java 写的Cron表达式解析

    2. **解析逻辑**:Java程序需要能够将用户输入的字符串转换为Cron表达式对象,这通常涉及对字符串的验证和解析。可以自定义一个解析器类,处理每个字段的特殊语法。 3. **双向绑定**:界面到表达式和表达式到界面的...

Global site tag (gtag.js) - Google Analytics