什么是正确的记录时间的姿势?

工作时候今天碰见一个情况,后端的时间返回给前端结果时间变成了8小时之前,明显就是GMT丢失的问题,进到代码一看 果不其然:

本身Date就是抛弃时区信息的一种格式,现在这样只是存入了丢掉了时区信息本地时间,如果使用了TimeStamp的话,各个数据库又有着不同的实现方式,并且只支持到2037年(原因移步连接: https://zh.wikipedia.org/wiki/2038%E5%B9%B4%E9%97%AE%E9%A2%98

如果我们捋清晰时区的概念和夏令时冬令时的概念之后,就会发现不管哪个时区都是描述的同一个时间,我们的绝对路径是一样的(JoJo的奇妙比喻)。

所以第一种方案可以使用Json格式化,这样前端接收到的json中就携带了时区信息

使用jackson的注解对时间进行格式化

另一种方法就是使用绝对时间,绝对时间不需要年月日,而是以秒来计时。当前时间是指从一个基准时间(1970-1-1 00:00:00 +0:00),到现在的秒数,用一个整数表示。

使用Long来存放绝对时间,库中使用BigInt

第二种方式不易出错,而且需要比较时间的==比较两个数字大小,用时间来作为筛选也很方便,传递给前端也方便

唯一的缺点可能就是在库中看起来不直观,不能直接看到时间,而是看到一串不明所以的数字。

发表回复

蒙ICP备2022000577号-1