博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于java.text.SimpleDateFormat的parse()方法存在的坑
阅读量:2197 次
发布时间:2019-05-02

本文共 689 字,大约阅读时间需要 2 分钟。

前言

在将字符串转为java.util.Date对象的时候,为了方便(主要是懒得做日期字符串的正则匹配)就干脆使用了java.text.SimpleDateFormatparse()方法。但是我发现parse()在解析日期字符串的时候本身存在一些问题。

问题代码

以下是出现问题的代码

DateFormat df=new SimpleDateFormat("yyyy-MM-dd");try {	Date date=df.parse("2016--1-01");	System.out.println(date);} catch (ParseException e) {	e.printStackTrace();}

分析

这段代码我想很多人认为应该是抛出异常吧,但是实际上这段代码的运行结果是

Sun Nov 01 00:00:00 CST 2015

经过源码的调试后才知道2016--1-01中,月份是可以作为负数识别的,既这个字符串被识别为20161月之前的2个月的第一天。(2个月是因为月份是从0开始计算的)

解决方案

解决方案如下:

DateFormat df=new SimpleDateFormat("yyyy-MM-dd");try {	Date date=df.parse("2016--1-01");	//指定日期/时间解析是否不严格,默认是不严格(true)	df.setLenient(false);	System.out.println(date);} catch (ParseException e) {	e.printStackTrace();}

转载地址:http://uhoub.baihongyu.com/

你可能感兴趣的文章
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>