Sqlalchemy postgreSQL читает метку времени с часовым поясом как Европа / Берлин - PullRequest
0 голосов
/ 29 января 2019

У меня есть временные метки с часовым поясом в моей БД.Они всегда создаются в UTC.

Мне нужно показывать время пользователям в Европе / Берлине.Прямо сейчас мне нужно изменить время повсюду с помощью JS или Jinja2, чтобы отображать правильное время.Я чувствую, что должно быть глобальное решение, но я не могу найти его.

Это пример (модели):

class User(UserMixin, Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    date_added = Column(DateTime(timezone=True), nullable=False)

и вот код, если пользователь создан:

new_user = User(date_added=datetime.today())

Вот как это выглядит в БД:

enter image description here

Однажды я работал с БД MySQL и былиспользуя это:

db_session.execute("SET SESSION time_zone = 'Europe/Berlin'")

Есть ли что-то похожее для posgreSQL?

1 Ответ

0 голосов
/ 29 января 2019

Я думаю, что ваша база данных не зависит от часовых поясов.Я обычно вызываю эту функцию перед отображением даты и времени из моей базы данных PostgreSQL:

from pytz import timezone, UTC

def to_user_timezone(dt):
    """Convert a datetime object to the user's timezone.  If you need
    to convert a :class:`datetime.datetime` object at any time to the user's
    timezone (as returned by :func:`get_timezone` this function can be used).
    """
    if dt.tzinfo is None:
        dt = dt.replace(tzinfo=UTC)
    tzinfo = timezone('Europe/Berlin')
    return tzinfo.normalize(dt.astimezone(tzinfo))
...