zoukankan      html  css  js  c++  java
  • Timestamp 数据类型四舍五入引起的神奇bug

    神奇bug, Timestamp 会四舍五入也会引起 bug .. 

    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);

    这段代码有问题吗? 

    其实是有的, time / 1000 * 1000 之后, time 相对于失去了 尾数后面3个数字, 也就是 直接截断了. 但是, outDate 并没有, outDate 保存的mysql 数据库里面的时候, 也会截断吗?  如果也是截断, 那么就不会有任何问题. 但是, 经测试 实际不是的, 它会四舍五入 ..

    如果time 末尾三位数小于500, 那么也没有问题, 如果大于, 就出现bug了, 后面如果再次从数据库获取 outDate, 那么其毫秒值会 不等于outDateLong  ,  刚好出现几率为 0.5 的bug 啊!!   ( 当然, 如果不关心outDateLong , 其实也没有什么问题, 谁会去关心那个秒级的四舍五入呢?)

    改成下面的样子就好了..

    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);

    ..

  • 相关阅读:
    终于找到个eclipse的高级点的插件了!
    ArrayList排序 降序排列
    sql语法总结
    preparedStatement的用法总结
    ReactiveCocoa源码解读(二)
    ReactiveCocoa源码解读(一)
    ReactiveCocoa应用篇(二)
    ReactiveCocoa应用篇(一)
    iOS
    Monad详解
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/9340684.html
Copyright © 2011-2022 走看看