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

    ..

  • 相关阅读:
    Subversion 1.5.5 与 Apache 2.2 结合
    IE6 式样表 Bug
    Dreamweaver 禁止自动换行
    错误:Internet Explorer cannot open the Internet site
    Html Agility Pack – XPath 基本语法
    不要安装 CodeSmith 5.2
    控件包含代码块,因此无法修改控件集合
    单例模式
    第一篇博文
    包与导入的概念
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/9340684.html
Copyright © 2011-2022 走看看