神奇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. RHEL 6 和 RHEL 7 的一些有关运行级别,服务管理,服务启动等方面的区别介绍

    systemd是7中的新命令组,集成了service和chkconfig的功能.system命令可参考:https://www.cnblogs.com/ray-bk/p/10415173.html 运 ...

  2. TensorFlow函数:tf.random_shuffle

    tf.random_shuffle 函数 random_shuffle( value, seed=None, name=None ) 定义在:tensorflow/python/ops/random_ ...

  3. golang结构体、接口、反射

    struct结构体 struct用来自定义复杂数据结构,可以包含多个字段属性,可以嵌套; go中的struct类型理解为类,可以定义方法,和函数定义有些许区别; struct类型是值类型. struc ...

  4. format 插入一个字符,%d,%n

  5. idea取消参数名称(形参名)提示

    idea取消参数名称(形参名)提示 IDEA会自动显示形式参数的变量名称,这在一开始使用时感觉很方便,友好.有时候也会显得排版很乱,下面是取消自动显示形式参数名称的方式 取消前是这个样子. “File ...

  6. 判断手机是安卓还是ios

    let ORZ = function() { if(!(this instanceof ORZ)) { return new ORZ; }}ORZ.prototype = { // 判断用户手机是An ...

  7. Python全栈之路----常用模块----os模块

    os模块提供了很多允许你的程序和操作系统直接交互的功能 得到当前工作目录,即当前Python脚本工作的目录路径:os.getcwd() #test.py import os print(os.getc ...

  8. SQLI DUMB SERIES-9&&10

    第五关.第八关以及第九关.第十关都是使用盲注,除了第五关说的双注入外,也可使用时间注入法 (1)无论输入啥,都回显相同 (2) ?id=1' and sleep(3) --+ 发现有明显延迟,说明可以 ...

  9. Spring IOC 相关的面试题

    Spring最基础的部分就是IOC,对IOC的理解程度从某个方面代表着你对Spring  的理解程度,看了网上的一些面试题,针对Spring IOC相关的重点是下面几个: 1.Spring中Bean ...

  10. zabbix性能优化记

    以前用zabbix,都是简简单单的把服务端.客户端一搭,模板监控项一弄就完了.没怎么真正去弄过优化啊之类的.现在有个场景就是获取zabbix的数据贼慢,得对zabbix进行优化,开始动手分析一下.   ...