1.问题
今天新增一个需求,要根据datetime字段匹配几张表里的记录值。结果发现总是有几条记录莫名其妙多1秒钟,开始以为是数据来源那边有问题,经过一系列排查发现数据到插入前都是对的…
2.原因
度娘说是mysql保存日期时间值时会对毫秒级的精度进行调整,四舍五入。这么一说就清楚了呀。
3.解决方案
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
直接将毫秒数设置为0。
当然,更好的处理方式是,使用时间戳来代替日期。毕竟项目已经到维护阶段了,能不改字段就不改字段了吧。