时区的坑:数据时间在不同数据库中差8小时、13小时、14小时是怎么回事

发布时间 2023-11-24 11:46:23作者: 手心里的宇宙

为什么会同一条数据,会有小时差异

恭喜你,十有八九,就是时区的问题:
首先要明确的是,我们中国的标准时区是东八区,就是世界协调时间(UTC)加上八个小时,也就是UTC+8。
格林尼治标准时间
最坑的是美国时间,因为美国实行的是夏令时,也就是说美国是有两个时区在一天内来回切换,有几个月是西六区,有几个月是西五区
image
所以,当处理跨国公司,特别是美国的数据时,和我们相差13或14个小时都是正常的

如何处理呢?

很简单,确定好原始库的时区,再确定好目标库的时区,然后处理就可以了。
此时,第二个坑来了,请问,下面这个数据库的时区是哪里?
image
恭喜你,你获得了4个正确且标准的答案:
image
说它是美国时间、澳大利亚时间、中国时间、古巴时间,都对!那么这条数据到底是哪个时区呢?
1、直接问客户!
2、根据时间差来算一下。
到了重点了,体现到数据层面,该如何处理呢?
处理方式也很简单:
1、设置数据库时区保持一致
2、写数据时转换一下,比如hive和spark的set spark.sql.session.timeZone=GMT+8; 等
3、简单粗暴,直接加减,就是使用date_add之类的函数,直接把相差的那几个小时加回来或减回来