【问题标题】:How do I convert the time stamps from a PostgreSQL DB into user-time-zone times?如何将 PostgreSQL 数据库中的时间戳转换为用户时区时间?
【发布时间】:2011-05-17 13:35:49
【问题描述】:

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

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

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

我的网络应用程序用户有一个 timezone 属性,我尚未指定其格式(这是此问题的一部分),该属性确定如何向他们显示时间戳。显然,它们并不都在服务器的区域设置中,因此系统时区并不是很有用。

我希望有一种简单的方法来获取根据每个用户选择的时区格式化的时间戳。

(我对时区转换的很多术语都有些模糊,所以如果我含糊其辞地问这个问题——我敢打赌!——请随时发表评论并帮助我澄清!)

【问题讨论】:

    标签: python postgresql timezone sqlalchemy timestamp


    【解决方案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
    

    您可以使用“在时区”命名法来缩短此时间:

    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 会话中设置它?
    • (为了它的价值,我在 Pylons 中运行它)
    • 我不知道如何让 SQLAlchemy 做任何事情。没用过。
    【解决方案2】:

    您可以使用pytz 进行转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2023-03-28
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多