我在网络应用程序中使用SQLAlchemy和PostgreSQL。
我的SQLA模型(大致)定义如下:
class MyModel(Base):
ts_field = Column(DateTime(timezone=True))
# more here, obviously
我的网络应用用户拥有timezone
属性,其格式尚未指定(这是此问题的一部分),用于确定如何向其显示时间戳。显然,它们并非都在服务器的语言环境中,因此系统时区并不完全有用。
我希望能够轻松地根据所选时区为每个用户设置格式化的时间戳。
(我对时区转换的术语有点模糊,所以如果我含糊地问这个 - 我敢打赌我是! - 请随意评论并帮我澄清一下!)
答案 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进行转化。