对timestamptz的研究,是为了项目内部时间戳的统一。统一时间戳可以有如下好处:
-
统一的认知层次,大家都清晰的知道,前端、后端、数据库中的时间戳意味着什么(主要是时区问题)
-
统一的工具类,我们可以用通一的时间戳工具类,完成我们所有的时间戳需求
-
利于框架层面统一处理时间戳,请求进入服务、返回到前端、服务内部的反序列化时我们时间戳都能正确的表达我们想要的数据。
理解timestamp和timestamptz
timestamp数据类型可以同时存储日期和事件,但它不存储时区,这意味着修改了数据库服务器所在的时区时,它里面存储的值不会改变。timestamptz数据类型在存储日期和事件的同时还能正确处理时区。
PostgreSQL使用UTC值来存储Timestamptz数据。在想timestamptz字段插入值的时候,PostgreSQL会自动将值转换成UTC值,并保存到表里。当从一个timestamptz字段查询数据的时候,postgreSQL会把存储在其中的utc值转换成数据库服务器、用户或当前链接所在的时区(如何理解用户、点前链接所在的时区)。
重要提示:timestamptz并不会存储时区,它只是存储了utc值,然后会和当前时区进行转换。