开发中遇到的时间类型bug

博客讨论了开发中遇到的各种时间类型问题,包括千年虫、时区问题、服务器时间同步、开发人员误用和系统设计缺陷。特别强调了2038年问题,以及在容器环境下默认时区可能导致的问题。解决方案包括更换存储方式,如将timestamp更改为datetime,注意时区设置,以及使用不可变时间对象以避免代码中出现错误。
摘要由CSDN通过智能技术生成

先根据错误的原因分个类
系统存储本身限制。最经典当属千年虫
时区问题。目前常见的话,使用容器时默认时区是美国的,直接使用会出现。
服务器时间未同步。这样的bug,不常见,但项目做多了,还是有几率碰见…
开发人员使用不当。 代码bug…
系统设计问题导致
以2038举例来说,时间是按照1970年1月1日起至所存储日期过去了多少秒来计算的。这个数值是在系统里用32位来表示的,并且有正负。那么 1970年 + 2^31秒(约68年) 就是这个系统友链交易最终支持的时间,超过就变成负数。比特币中的数值无正负,所以能再延长一倍的时间。
按理说,这个时间还早,到时候问题会解决,当历史告诉我们,未必! 例如 2000年。 与之类似的还有 民国百年 ,他们系统年只有2位,当100的时候就无法显示…
以上问题解决也简单,换个存储方式即可,例如MySQL timestamp 更换成datetime ,或使用long存储。 不过要注意时区问题。
我们周会分享这个问题原因是,设置一个时间是2099年的。而``timestamp` 最大就2038年,问题来了!
时区问题
只在容器上碰见过
docker默认时区是美国的,所以有时间相关的项目在做DockerFile时一定要注意,
第一次碰见的时候,以为是数据库时区问题
排查没问题后,又以为是数据库链接的问题
排查再没问题后,以为是使用LocalDateTime的问题,到这也就发现。其实是容器的问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值