如何将PostgreSQL DB中的时间戳转换为用户时区时间?

时间:2010-11-29 22:37:45

标签: python postgresql timezone sqlalchemy timestamp

我在网络应用程序中使用SQLAlchemy和PostgreSQL。

我的SQLA模型(大致)定义如下:

class MyModel(Base):
    ts_field = Column(DateTime(timezone=True))
    # more here, obviously

我的网络应用用户拥有timezone属性,其格式尚未指定(这是此问题的一部分),用于确定如何向其显示时间戳。显然,它们并非都在服务器的语言环境中,因此系统时区并不完全有用。

我希望能够轻松地根据所选时区为每个用户设置格式化的时间戳。

(我对时区转换的术语有点模糊,所以如果我含糊地问这个 - 我敢打赌我是! - 请随意评论并帮我澄清一下!)

2 个答案:

答案 0 :(得分:1)

好的,当您使用时区(快捷方式名称timestamptz)创建时间戳时,pg会创建一个时间戳,并在存储时将当前时区之间的转换为GMT。

当您将其拉出时,您可以将时区设置更改为您想要将其更改为其他偏移量的任何设置。例如:

 smarlowe=# set timezone='est';
 SET
 smarlowe=# select now();
               now              
 2010-11-30 00:38:32.683625-05
 (1 row)

 smarlowe=# set timezone='mst'; 
 SET
 smarlowe=# select now();
               now              
 2010-11-29 22:38:48.293708-07

您可以使用“at time zone”命名法来缩短这一点:

smarlowe=# set timezone='mst';
SET
smarlowe=# select now();
              now              
-------------------------------
 2010-11-29 22:40:15.854833-07
(1 row)

smarlowe=# select now() at time zone 'est';
          timezone          
----------------------------
 2010-11-30 00:40:17.243828

无需一次又一次地设置每个时区,只需在每次根据适当的时区进行声明。

答案 1 :(得分:0)

您可以使用pytz进行转化。