java.util.date转换成java.util.date天数少1,时间被截断
一. 原因分析
- java.sql.Date是为了配合SQL+DATE而设置的数据类型。“规范化”的java.sql.Date 只包含年、月、日信息,时分秒毫秒都会清零。
- 如果我们把一个java.sql.Date值通过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化,非规范化的部分将会被劫取。然而,我们java.sql.Date一般由java.util.Date转换过来,如:
java.sql.Date Date=new java.sql.Date(new java.util.Date().getTime()).
二.解决方法
- 查找资料多数人都说将java.util.Date转换成java.util.Timestamp存储进数据库,但是经过实验后发现还是会被截断,想着会和时区有关,后来查找资料又将serverTimezone=UTC改成serverTimezone=HongKong,这下发现程序不能运行了...
- 最后还是把serverTimezone改回最初的样子,但这个问题还是没能解决。最后想着不如手动添加一天时间,即进行setDate时将获得的java.util.Date加一天时间后再转成java.sql.Date,最后成功了。为了在控制台方便输入时间,因此设置了时间输入格式。
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
Scanner input=new Scanner(System.in);//控制台输入
String text=input.nextLine();//获取控制台输入
Date d=sdf.parse(text);//将日期字符串转换成日期对象
java.sql.Date date=new java.sql.Date(d.getTime()+1000*60*60*24);//转换成long类型运算
- 所以如果不涉及时分秒的时间换算,实体类bean和数据库中的字段都设置成Date类型进行存储即可。
- 如果涉及时分秒的时间换算,就都设置成Timestamp存储,如果还出现时间截断等问题,手动添加即可。
welcome~the interesting soul

浙公网安备 33010602011771号