博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Timestamp 数据类型四舍五入引起的神奇bug
阅读量:5242 次
发布时间:2019-06-14

本文共 1034 字,大约阅读时间需要 3 分钟。

 

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

..

 

posted on
2018-07-20 11:49 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/FlyAway2013/p/9340684.html

你可能感兴趣的文章
Face The Right Way POJ - 3276 (开关问题)
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
变量的命名规范
查看>>
手机端自动跳转
查看>>
react中进入某个详情页URL路劲参数Id获取问题
查看>>
首届.NET Core开源峰会
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
python pdf转word
查看>>
文本相似度比较(网页版)
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>