这是情况。我们有一个AWS服务器,我们将为我们的客户(基本上来自世界各地)部署我们的应用程序。我们正在为我们的应用程序使用postgresql数据库,Java7,ibatis。 对于每个客户,我们将有一个单独的postgres数据库(例如: - database_cust1,database_cust2等...)和单独的war文件。
所以这就是问题: - 我们正面临时区问题,因为客户来自世界各地。因此,我们假设我们有2位美国和印度客户,根据IST,我们确保美国人根据他的时区时间和印度人观看/修改。我们尝试通过使用查询
在postgres db中设置时区格式来解决此问题ALTER DATABASE american_db SET timezone =' America / Los_Angeles';
这很好用,因为我插入表中的数据是根据美国时间标准存储的。但是从java(ibatis)检索相同的数据时,我们得到服务器时间,但不是美国/洛杉矶的时间。我尝试过在线搜索,但没有一个解决方案有效。提前谢谢。
答案 0 :(得分:0)
数据库将timestamptz存储为UTC时间戳,并自动将其从连接时区转换为连接时区。如果使用alter database
设置数据库时区,则会将其视为连接客户端的默认连接时区。但是有些客户端会自动将连接时区自动设置为操作系统时区,忽略数据库默认值。
如果您希望数据库自动将timestamptz值转换为某个选定时区(与客户端的操作系统时区不同),则应在建立与数据库的连接后立即发出set timezone='America/Los_Angeles'
命令。有些程序允许在配置数据库凭据时设置它 - 我不知道iBATIS / MyBatis是什么。
=> set timezone='America/New_York';
=> select '2018-02-17 15:17+01'::timestamptz;
2018-02-17 09:17:00-05
=> set timezone='Asia/Kolkata';
=> select '2018-02-17 15:17+01'::timestamptz;
2018-02-17 19:47:00+05:30