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存储,如果还出现时间截断等问题,手动添加即可。
posted @ 2021-04-25 19:39  芥纳须弥  阅读(871)  评论(0)    收藏  举报