Python 如何将PostgreSQL数据库中的时间戳转换为用户时区时间?

Python 如何将PostgreSQL数据库中的时间戳转换为用户时区时间?,python,postgresql,timezone,sqlalchemy,timestamp,Python,Postgresql,Timezone,Sqlalchemy,Timestamp,我在web应用程序中使用SQLAlchemy和PostgreSQL 我的SQLA模型(大致)定义如下: class MyModel(Base): ts_field = Column(DateTime(timezone=True)) # more here, obviously 我的web应用程序用户有一个时区属性,我尚未指定该属性的格式(这是问题的一部分),以确定如何向他们显示时间戳。显然,它们并不都在服务器的区域设置中,因此系统时区并不十分有用 我想有一种简单的方法,根据每个

我在web应用程序中使用SQLAlchemy和PostgreSQL

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

class MyModel(Base):
    ts_field = Column(DateTime(timezone=True))
    # more here, obviously
我的web应用程序用户有一个
时区
属性,我尚未指定该属性的格式(这是问题的一部分),以确定如何向他们显示时间戳。显然,它们并不都在服务器的区域设置中,因此系统时区并不十分有用

我想有一种简单的方法,根据每个用户选择的时区,为他们格式化时间戳


(我对时区转换的许多术语有点模糊,所以如果我问得含糊不清——我敢打赌我是!-请随意评论并帮助我澄清!)

您可以使用来进行转换。

您可以使用来进行转换。

好的,当您创建带有时区的时间戳时(快捷方式名称TIMESTAMTTZ)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
您可以使用“在时区”术语来缩短此时间:

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

无需反复设置每个时区,每次只需在语句中根据正确的时区进行设置。

确定,当您使用时区(快捷方式名称TIMESTAMTZ)创建时间戳时,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
您可以使用“在时区”术语来缩短此时间:

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

无需反复设置每个时区,每次只需在语句中根据适当的时区设置即可。

这很酷,但在检索此值之前,我如何在SQLAlchemy会话上设置它?(值得一提的是,我正在挂架中运行此功能)我不知道如何让SQLAlchemy执行任何操作。从未使用过它。这很酷,但在检索此值之前,我如何在SQLAlchemy会话上设置它?(值得一提的是,我正在挂架中运行此功能)我不知道如何让SQLAlchemy做任何事情。从来没用过。