2010-11-29 5 views
0

Ich benutze SQLAlchemy und PostgreSQL hier, in einer Webanwendung.Wie konvertiere ich die Zeitstempel von einer PostgreSQL-DB in Benutzer-Zeitzonen-Zeiten?

Mein SQLA Modell ist (grob) wie folgt definiert:

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

Meine Web-App-Nutzer haben eine timezone Eigenschaft, dessen Format habe ich noch nicht festgelegt (das ist Teil dieser Frage), der bestimmt, wie die Zeit angezeigt werden Briefmarken zu ihnen. Sie sind natürlich nicht alle im Gebietsschema des Servers, daher ist die Systemzeitzone nicht gerade nützlich.

Ich möchte eine einfache Möglichkeit haben, Zeitstempel für jeden Benutzer formatiert zu bekommen, abhängig von der gewählten Zeitzone.

(Ich bin ein wenig unscharf über viele Begriffe der Zeitzonenumwandlung, also wenn ich das vage frage - und ich wette, ich bin! - bitte zögern Sie nicht, zu kommentieren und mir zu helfen Klar!)

Antwort

0

Sie können pytz verwenden, um die Konvertierungen durchzuführen.

1

OK, wenn Sie einen Zeitstempel mit Zeitzone (Verknüpfungsname timestamptz) erstellen, erstellt pg einen Zeitstempel und konvertiert beim Speichern zwischen der aktuellen Zeitzone in GMT.

Wenn Sie es herausziehen, ändern Sie die Einstellung für die Zeitzone auf den Wert, den Sie für einen anderen Offset verwenden möchten. Zum Beispiel:

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 

keine Notwendigkeit, jede Zeitzone einzustellen und immer nur in der Erklärung jedes Mal nach:

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 

Sie können dies durch die Verwendung „auf Zeitzone“ Nomenklatur verkürzen up die richtige Zeitzone.

+1

Das ist ziemlich cool, aber wie kann ich das in einer SQLAlchemy-Sitzung festlegen, bevor dieser Wert abgerufen wird? –

+0

(für das, was es wert ist, führe ich das in Pylons) –

+0

Ich habe keine Ahnung, wie SQLAlchemy etwas machen kann. Habe es nie benutzt. –

Verwandte Themen