SimpleDateFormat未抛出ParseException
关于SimpleDateFormat的不严格性【技术探讨】
今天一组员写了几段Java代码,发现如下问题:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
System.out.println(sdf.parse(timestamp.toString()));
此语句居然没有报异常,于是写了下面一段代码
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
System.out.println(sdf.parse("2017-06-08 15:49:53.395"));
效果同第一段代码一样,没有报异常,输出为Tue Dec 06 00:08:15 CST 2016
针对于些,找了网上的一些内容,在
http://bbs.csdn.net/topics/190075531第9楼找到的结果
根据此,找到相关的JavaDoc内容,看到如下内容
SimpleDateFormat 继承于DateFormat
SimpleDateFormat.parse()->DateFormat.parse(String source)->DateFormat.parse(String source, ParsePosition pos)->SimpleDateFormat.parse(String source, ParsePosition pos)
根据DateFormat的public abstract Date parse(String source, ParsePosition pos)方法注解,存在如下内容:
* <p> By default, parsing is lenient: If the input is not in the form used
* by this object's format method but can still be parsed as a date, then
* the parse succeeds. Clients may insist on strict adherence to the
* format by calling {@link #setLenient(boolean) setLenient(false)}.
译文如下:
一般来说,解析是不严格的。如果输入不符合Object的格式(即定义的SimpleDateFormat),仍会被解析成一个日期,这个解析是成功的。开户者如果坚持严格校验输入的格式的话,请使用方法etLenient(boolean) 设置属性setLenient(false)
根据此,写了如下代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
sdf.setLenient(false);
System.out.println(sdf.parse("2017-06-08 15:49:53.395"));
正常抛出异常ParseException,测试通过,只是以后再做解析时,需要再多加一行代码了
此问题,我在Java 6u45 32位,Java 8u131 64位中测试通过,应该普遍存在于Java6~Java8中,望使用者注意
附加信息,在某些情况下,SimpleDateFormat会自动处理,即setLenient(true)的情况下,并且,有些情况下,即使setLeniet(true),也会抛出ParseException。具体逻辑,可能还需要根据源码再行分析……
感谢 http://bbs.csdn.net/topics/190075531
原文:https://blog.csdn.net/lengmohui668/article/details/79678047
SimpleDateFormat未抛出ParseException的更多相关文章
- 多线程状态下调用SimpleDateFormat.format()抛出 ArrayIndexOutOfBoundsException 异常
本来想在类的顶部设置一个 静态的SimpleDateFormat常量 public final static DateFormat dateFormatGMT = new SimpleDateForm ...
- 页面打开 抛出w3wp.exe 中发生未处理异常
页面打开 抛出w3wp.exe 中发生未处理异常
- Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出
Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出 package com.test; import org.apach ...
- java 错误: 未报告的异常错误Exception; 必须对其进行捕获或声明以便抛出
import java.io.FileInputStream; import java.util.Properties; import java.sql.Connection; import java ...
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法
这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...
- WCF服务创建与抛出强类型SOAP Fault
原创地址:http://www.cnblogs.com/jfzhu/p/4060666.html 转载请注明出处 前面的文章<WCF服务的异常消息>中介绍过,如果WCF Service发生 ...
- 窥探Swift编程之错误处理与异常抛出
在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...
- Spring异常抛出触发事务回滚
Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...
- Spring事务异常回滚,捕获异常不抛出就不会回滚(转载) 解决了我一年前的问题
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了....... 为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...
随机推荐
- Vue + Element UI 实现权限管理系统(优化登录流程)
完善登录流程 1. 丰富登录界面 1.1 从 Element 指南中选择组件模板丰富登录界面,放置一个登录界面表单,包含账号密码输入框和登录重置按钮. <template> <el- ...
- owin启动事项
在上下文中找不到 owin.Environment 项 owin没有启动. 尝试加载应用时出现了以下错误.- 找不到包含 OwinStartupAttribute 的程序集 startup类不是通过v ...
- 普通程序员,三年成为年薪70w架构师,只因做到了这些
每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来.今天给大家分享的是一篇来自阿里Java架构师对普通程序员的职业建议,希望 ...
- Animation(动画)倒着播放方法
public GameObject AnimationObj;//带有动画的对象 // Use this for initialization void Start () { AnimationObj ...
- getopts的使用方法
getopts的使用 语法格式:getopts [option[:]] [DESCPRITION] VARIABLE option:表示为某个脚本可以使用的选项 ":":如果某个选 ...
- python3 线程池-threadpool模块与concurrent.futures模块
多种方法实现 python 线程池 一. 既然多线程可以缩短程序运行时间,那么,是不是线程数量越多越好呢? 显然,并不是,每一个线程的从生成到消亡也是需要时间和资源的,太多的线程会占用过多的系统资源( ...
- sqlalchem表关联(一对多,一对一,多对多)
简介: 一:一对多关系 1.表示一对多的关系时,在子表类中通过 foreign key (外键)限制本列的值,然后,在父表类中通过 relationship() 方法来引用子表的类. 2.示例代码: ...
- C++构造函数和析构函数,以及构造函数特殊成员变量和函数的初始化
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 201621123001 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. Mysql数据库简单操作,常用的操作命令 启动:进入Mysql (从命令行mysql -u root -p) 退 ...
- Chrome浏览器录屏扩展插件
Chrome浏览器录屏扩展插件,可以录制网页操作或者桌面操作.生成MP4 Loom https://chrome.google.com/webstore/detail/loom-video-recor ...