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

..

Timestamp 数据类型四舍五入引起的神奇bug的更多相关文章

  1. Vertica的date与timestamp数据类型,to_date()与to_timestamp()函数区别

    实验环境:3节点,RHEL6.4 + Vertica 7.0.1 实验目的:了解Vertica数据库的date与timestamp数据类型,to_date()与to_timestamp()函数区别   ...

  2. [转]MySQL中timestamp数据类型的特点

    原文地址:https://www.imooc.com/article/16158 在使用MySQL数据库时有很多常见的误解,其中使用int类型来保存日期数据会提高数据读取的效率就是比较常见的一个误解. ...

  3. IE6的3像素神奇bug:缘起与解决方案

    在我们这样一个神奇的国度,到了2014年了,居然还是有很多人的电脑上用着XP,安装的是IE6,他们没有想过要升级,我们就得想着兼容他们.... 一. 6爷我喝高了,最后一行有重影.那什么是IE6 的3 ...

  4. mysql中date,datetime,timestamp数据类型区别

    (1)date表示日期,其范围为1000-01-01到9999-12-31 (2)datetime表示日期时间,其范围是1000-01-01 00:00:00到9999-12-31 23:59:59 ...

  5. 安卓手机360浏览器神奇bug,难以理解的

    今天渠道组,说广告在安卓手机360浏览器上显示不了,我就去排查这个问题,发现所有安卓浏览器还真看不到广告,本来以为是360浏览器屏蔽了,,但是另一个项目就没事,后来经过几个小时的不断alert断点调试 ...

  6. 5.1 timestamp数据类型默认值

    5.1 不支持同一张表中有多个tmiestamp类型字段的默认值为current_time,  5.6版本无此问题

  7. (asp.net)百度浏览器Cookie的神奇bug

    HttpCookie cookie = new HttpCookie("version"); cookie.Value = "1.1"; cookie.Expi ...

  8. MSSQLSERVER数据库- 数据类型Timestamp

    Timestamp:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器.当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将 ...

  9. mysql 数据类型TIMESTAMP用法

    在mysql数据库中,timestamp数据类型是一个比较特殊的数据类型,可以自动在不使用程序更新情况下只要更新了记录timestamp会自动更新时间. 通常表中会有一个Create date 创建日 ...

随机推荐

  1. Android : 关于HTTPS、TLS/SSL认证以及客户端证书导入方法

    一.HTTPS 简介 HTTPS 全称 HTTP over TLS/SSL(TLS就是SSL的新版本3.1).TLS/SSL是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传 ...

  2. Jmeter压力测试生成聚合报告

    Jmeter压力测试: 压力测试的场景设置分为三种: 单场景:一个请求(如:单个接口的测试) 混合场景:多个请求(如:购物流程的测试) 压测时间,一般场景都是运行10-15分钟,如果是做疲劳测试的话, ...

  3. python基础07_tuple_dict

    tuple 元组     dict 字典 更详细参考:https://www.cnblogs.com/jin-xin/articles/7562422.html #!/usr/bin/env pyth ...

  4. 18-09-20 关于Xlrd和Xlwt的初步学习

    #一关于利用xlrd 打开Excel 读取数据的简单介绍import xlrd """ #1 xlrd 基础的用法:读取,获取sheet,获取内容,行数,列数def re ...

  5. python2入门(2)

    四.python条件语句 if语句基本语法if 判断条件: 执行语句块else if: 执行语句块else: 执行语句 五.循环语句 1 - while循环基本语法while 判断条件: 执行语句块w ...

  6. java中有关初始化的问题

    在类的内部,变量定义的先后顺序决定了初始化顺序,即使变量定义分散在方法定义之外,它们依旧会在任何方法(包括构造器)被调用之前得到初始化 其中初始化的顺序先是静态对象,其后是非静态对象 例如: clas ...

  7. 【Java】字符串工具类

    import android.annotation.SuppressLint; import java.io.UnsupportedEncodingException; import java.uti ...

  8. Jquery仿百度经验左右滚动切换效果(转)

    http://www.xwcms.net/webAnnexImages/fileAnnex/201608/61342/index.html

  9. 常见模块(三) pickle模块和json模块

    (一)json和pickle的区别 1.json是不同编程语言实现数据交换的工具,他是用来把python中的数据对象转换成字符串或者写入文件中的,再由其他语言通过json加载进来. 2.pickle是 ...

  10. windows添加永久静态路由

    添加路由最好在命令行管理员模式下操作 添加临时路由命令,重启后失效 route add 172.16.1.0 mask 255.255.255.0 10.0.10.19 其中,172.16.1.0 是 ...