数据库中的时区转换

1

在我接触过的项目中,存储时间基本都是使用变长字符串按照yyyyMMdd等类似格式存储的,而不是使用datatime或者timestamp这些数据库提供的时间类型进行存储

这样使用有好有坏,根据项目情况选择使用。

2

我长期维护的项目都是采用前者,也就是存储字符串yyyyMMdd

所以最近遇到一个用了timestamp存储创建时间的情况,在我自己电脑的测试环境下进行单元测试的时候,我发现每次我存储的时间都会存在10多个小时的时差。 当时由于几乎没遇到过这种情况,所以我没想到原理上出了什么问题。后来才得知是timestamp会做时区转换。

为什么要做时区转换?

因为人家存的是一个时间戳(long),显示的时候为了好看点,就按照默认时区做了转换。如果默认时区和你所在时区不一致,转换就出问题,导致每次都有时差

怎么纠正这种坑

很简单,修改数据库的默认时区即可。网上攻略很多,不谈了。我们要知道原理是因为时区的即可。

Live2d