我们在开发中经常遇到时间和string的相互转换。经常用到就是SimpleDateFormat ,但是这个类却有些坑容易踩。
坑一 new SimpleDateFormat("yyyyMMdd")中 时间格式中对大小写敏感.
String str="20190912";
SimpleDateFormat formate = new SimpleDateFormat("yyyymmdd");
System.out.println(formate.parseObject(str));
这样格式化的时候应该没错吧,运行一下,
Sat Jan 12 00:09:00 GMT+08:00 2019
咦,怎么回事,怎么成一月份了? 时间格式中对大小写敏感,然后我们换成 yyyyMMdd
String str="20190912";
SimpleDateFormat formate = new SimpleDateFormat("yyyyMMdd");
System.out.println(formate.parseObject(str));
Thu Sep 12 00:00:00 GMT+08:00 2019 输出正确。
坑 二 当时间格式传入错误时,不报错,直接转换成错误的时间
String str="2019-09-12";
SimpleDateFormat formate = new SimpleDateFormat("yyyyMMdd");
try {
System.out.println(formate.parseObject(str));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
输出:Sun Dec 09 00:00:00 GMT+08:00 2018,没有报错,但是输出错误的时间。
那我们不想有错误的结果怎么办?加一个 formate.setLenient(false);这时候就会抛出异常
String str="2019-09-12";
SimpleDateFormat formate = new SimpleDateFormat("yyyyMMdd");
formate.setLenient(false);
try {
System.out.println(formate.parseObject(str));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这时候是抛出异常,不会自动调整转化。