2010-11-29 3 views
0

ここでは、SQLAlchemyとPostgreSQLをWebアプリケーションで使用しています。PostgreSQL DBのタイムスタンプをユーザタイムゾーンに変換するにはどうしたらいいですか?

次のように私のSQLAモデルは(おおよそ)に定義されます。

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

を私のWebアプリケーションのユーザーは、時間を表示する方法を決定し、その形式、私はまだ指定していない(つまり、この質問の一部です)timezone性質を持っていますそれらにスタンプ。サーバーのロケールにすべて入っているわけではないので、システムのタイムゾーンは正確には有用ではありません。

選択したタイムゾーンに応じて、各ユーザーのタイムスタンプを簡単に取得できます。

(私は、タイムゾーン変換に関する多くの用語に少しばかげているので、この漠然とした質問をすれば、私は賭けるでしょう)明確に!)

答えて

0

pytzを使用してコンバージョンを実行できます。

1

OK、タイムゾーン(ショートカット名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 

ちょうどたびに応じた声明の中で、何度も各タイムゾーンを設定する必要はありません適切なタイムゾーン。

+1

これはかなりクールですが、この値を取得する前にSQLAlchemyセッションでどのように設定するのですか? –

+0

(それは価値があります、私はPylonsでこれを実行しています) –

+0

私はSQLAlchemyに何かをさせる手がかりがありません。絶対使用しないでください。 –

関連する問題