一个小小细节引发的Bug

在工作时候,有一个功能是要获取当前时间作为该记录的创建时间插入DB,以往的时候是直接以DateTime或者直接就是以String类型插入DB的,这次是TimeStamp时间戳[有一些大神觉得时间戳是对的啊,没问题,长度够长,精度够准!其实不然,并不是长度长、位数多它就够精准!!]。笔者后台接收前端参数是一个大对象之中还套着对象,换句话来说就是子父级的关系,笔者需要外层对象插入DB后获取到外层对象DB内的ID作为内层对象的关联ID再进行插入,笔者获取关联ID是通过外层对象(假设这是一个用户表,传入的查询条件就是userName+createTime,这两个参数是前端传入的也就是已知确定)的已知字段进行查询获取ID,那么问题就是来了!!


问题的现象是:有时候根据查询条件时可以查到的,但有时候就会查询不到,经过LOGGER的打印得出结论,有时候时间戳的秒数(createTime)有时候会比原本接收的多一秒,这样关联当然查询不到,笔者此时瞬间就想到了四舍五入!经过一番查询,果不其然!
当TimeStamp的毫秒值 > 500时,则会自动进一秒。[到此时,还认为它是精确的吗!也许吧!]

对比两段代码,上面代码则会出现四舍五入的情况,下面的代码则不会:

String UUID = java.util.UUID.randomUUID().toString();
long time = System.currentTimeMillis() + 30 * 60 * 1000;
Timestamp outDate = new Timestamp(time);
long outDateLong = time/1000*1000;
user.setValidateUuid(UUID);
user.setOutDate(outDate);
userMapper.updateByPrimaryKey(user);

String UUID = java.util.UUID.randomUUID().toString();
long time = System.currentTimeMillis() + 30 * 60 * 1000;
long outDateLong = time/1000*1000;
Timestamp outDate = new Timestamp(outDateLong);
user.setValidateUuid(UUID);
user.setOutDate(outDate);
userMapper.updateByPrimaryKey(user);
Mr.小智 wechat
欢迎您扫一扫上面的微信公众号,关注智镜智言!