如何为移动客户端显示带时区的时间戳

时间:2017-06-22 21:42:50

标签: spring postgresql rest spring-mvc ionic-framework

我在纽约有一个数据库和一个应用服务器。我想写一个移动应用程序,将由来自不同城市(洛杉矶,纽约,迈阿密)的用户使用。我使用Postgresql作为数据库,Spring MVC作为后端,Ionic作为移动应用程序。我的问题是 - 当来自洛杉矶的用户A将数据插入数据库的时间10:00 AM时,我该如何向纽约的用户显示这些数据,因为存在时区差异?我应该如何在Postgres中存储此类数据,以及如何在Spring MVC中处理它?我的休息应该以毫秒为单位返回,还是应该使用timestamptimestampz

提前致谢!

1 个答案:

答案 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中设置时区。