用零秒设置的java.util.Calendar通过jdbc持续1秒到mysql

时间:2017-03-03 22:49:32

标签: java mysql jdbc calendar

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)之后,我们可以从该日志中看到insert语句正确地将秒设置为零。

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

1 个答案:

答案 0 :(得分:2)

解决方案是添加一个调用来设置毫秒:

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记录器),但数据库会将毫秒数转换为秒。因此,一半时间显示零秒,一半时间显示一秒。