我在纽约有一个数据库和一个应用服务器。我想写一个移动应用程序,将由来自不同城市(洛杉矶,纽约,迈阿密)的用户使用。我使用Postgresql
作为数据库,Spring MVC
作为后端,Ionic
作为移动应用程序。我的问题是 - 当来自洛杉矶的用户A将数据插入数据库的时间10:00 AM
时,我该如何向纽约的用户显示这些数据,因为存在时区差异?我应该如何在Postgres
中存储此类数据,以及如何在Spring MVC
中处理它?我的休息应该以毫秒为单位返回,还是应该使用timestamp
或timestampz
?
提前致谢!
答案 0 :(得分:1)
您应该将数据存储为TIMESTAMPTZ。这就是数据类型的用途。 This blog post解释了一下。
TIMESTAMPTZ以绝对时间存储所有时间戳,并根据用户的时区设置显示它们。例如:
postgres=# create table times ( some_time timestamptz );
CREATE TABLE
postgres=# set timezone = 'US/Eastern';
SET
postgres=# insert into times values ( '2017-09-15 10:00:00' );
INSERT 0 1
postgres=# set timezone = 'US/Pacific';
SET
postgres=# select * from times;
some_time
------------------------
2017-09-15 07:00:00-07
(1 row)
postgres=# set timezone = 'US/Eastern';
SET
postgres=# select * from times;
some_time
------------------------
2017-09-15 10:00:00-04
(1 row)
这使您可以从用户的角度显示正确的时间,即使对于自己移动并更改时区的用户也是如此。您只需要记住在连接时在JDBC中设置时区。