字符串转换成日期形式1986-2-24

上周有个同事问我,为啥Java里String转Date有时候对不上。
我一看他写的代码,跟你这段一模一样。

你这里用SimpleDateFormat解析字符串确实是个老办法。
你看,format.parse(str)把字符串变成Date对象,这个Date对象里存的是时间戳,不是你想要的"1 9 8 6 -2 -2 4 "这种字符串。

关键点在于,parse()方法返回的是java.util.Date这个类,它就是个时间戳。
你想要的结果还得靠format.format(date),这步才是把Date对象转回你想要的字符串格式。
所以最后return那句,其实应该是return format.format(date);,这样才把Date转成字符串。

不过要注意,SimpleDateFormat线程不安全,要是你在多线程环境里用,得加个synchronized块或者用ThreadLocal
要是纯单线程,你这写法问题不大。

我之前在2 02 3 年深圳搞项目时,就踩过这个坑。
有个地方没加异常处理,结果用户输入乱码日期,直接NullPointerException,整得我们加班修bug。
所以try-catch这块不能少。

所以总结一下,你这代码思路是对的,就是最后return的值要改掉。
其他没啥大问题。

java如何把string类型转换为mysql数据库中的date提么类型

你这代码我帮你看看哈。
你用 SimpleDateFormat 解析日期,然后直接 (Date)sdf.parse(time) 转成 java.util.Date,这没啥毛病。
但是你想想,SimpleDateFormat 是线程不安全的,你如果多个线程同时用,肯定出问题。
我在一个电商系统里就吃过这亏,当年搞活动,几百个线程同时跑,直接崩了,日志里全是 ConcurrentModificationException,把我愁得啊,最后改用 ThreadLocal 才搞掂。

至于存 java.util.Date 还是 java.sql.Date,这要看你存哪儿了。
一般存 MySQL,用 java.sql.Date 好,因为它继承自 java.util.Date,但是把 java.util.Date 存 MySQL 也行,只是你拿出来的 Java 对象就是个 java.util.Date,没什么区别。
我在做 Spring Boot 项目的时候,一般是根据实际情况来,如果方法入参是 java.sql.Date,那我就用 java.sql.Date,不然就用 java.util.Date,反正最后都转成时间戳存数据库。

你这种用 SimpleDateFormat 解析日期的方式,记得用 try-catch 捕获 ParseException,不然解析失败程序直接炸了。
我在写一个报表工具的时候,有个傻逼同事没加异常处理,结果用户输入了个啥乱七八糟的日期格式,程序直接崩了,用户还以为是系统出BUG,差点把我开除了。

所以,总结一下,你这种用 SimpleDateFormat 解析日期的方式没啥问题,但是要注意线程安全,存数据库的时候看情况来,java.util.Date 和 java.sql.Date 都行,记得加异常处理。