Как преобразовать метки времени из БД PostgreSQL во временные пояса пользователя? - PullRequest
0 голосов
/ 30 ноября 2010

Я использую SQLAlchemy и PostgreSQL здесь, в веб-приложении.

Моя модель SQLA определяется (приблизительно) следующим образом:

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

У пользователей моего веб-приложения есть свойство timezone, формат которого я еще не указал (это часть этого вопроса), который определяет, как отображать для них метки времени. Очевидно, что они не все в локали сервера, поэтому системный часовой пояс не совсем полезен.

Я хочу иметь простой способ получить метки времени, отформатированные для каждого пользователя в зависимости от выбранного часового пояса.

(Я немного не в курсе терминологии конверсии часовых поясов, поэтому, если я задам этот вопрос смутно - и я готов поспорить, что я такой! !)

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

ОК, когда вы создаете временную метку с часовым поясом (сокращенное имя 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

нет необходимости устанавливать каждый часовой пояс снова и снова, просто в выражениикаждый раз в соответствии с правильным часовым поясом.

0 голосов
/ 30 ноября 2010

Вы можете использовать pytz , чтобы сделать преобразования.

...