【问题标题】:java.util.Calendar set with zero seconds persists to mysql via jdbc with 1 second设置为零秒的 java.util.Calendar 通过 jdbc 持续到 mysql 1 秒
【发布时间】:2017-03-03 22:49:31
【问题描述】:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(1976, 8, 18, 5, 30, 0);
java.util.Date dt = cal.getTime();
//use jdbc to persist this to mysql

当我们从 mysql 查询值时,我们得到日期(注意额外的第二个): 1976-08-18 05:30:01

使用 jdbc 日志记录驱动程序 P6Spy (https://github.com/p6spy) 后,我们可以从该日志中看到插入语句正确地将秒数设置为零。

为什么要多加一秒?注意:这不会每次都发生。事实上,它发生的时间大约有一半。

【问题讨论】:

    标签: java mysql jdbc calendar


    【解决方案1】:

    解决方法是添加调用设置毫秒:

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    cal.set(1976, 8, 18, 5, 30, 0);
    cal.set(Calendar.MILLISECOND, 0);
    java.util.Date dt = cal.getTime();
    //use jdbc to persist this to mysql
    

    简而言之,毫秒是由驱动程序或 mysql 本身四舍五入的。当您说 Calendar.getInstance() 时,它会为您提供一个使用当前时间(包括毫秒)初始化的实例。当 java 默认显示时间时,它会截断毫秒(以及 p6spy 记录器),但数据库会将毫秒四舍五入为秒。因此,一半时间显示零秒,一半时间显示一秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多