PostgreSQL DB의 타임스탬프를 사용자 시간대 시간으로 어떻게 변환합니까? (How do I convert the time stamps from a PostgreSQL DB into user-time-zone times?)


문제 설명

PostgreSQL DB의 타임스탬프를 사용자 시간대 시간으로 어떻게 변환합니까? (How do I convert the time stamps from a PostgreSQL DB into user‑time‑zone times?)

여기서 웹 애플리케이션에서 SQLAlchemy와 PostgreSQL을 사용하고 있습니다.

내 SQLA 모델은 대략 다음과 같이 정의됩니다.

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

내 웹 앱 사용자에게는 타임스탬프를 표시하는 방법을 결정하는 형식이 아직 지정되지 않은(이 질문의 일부임) timezone 속성이 있습니다. 그것들이 모두 서버의 로케일에 있는 것은 아니므로 시스템 시간대는 정확히 유용하지 않습니다.

각 사용자에 따라 형식이 지정된 타임스탬프를 쉽게 얻을 수 있는 방법을 알고 싶습니다. 선택한 시간대를 선택했습니다.

(저는 시간대 변환에 대한 많은 용어에 대해 다소 모호하기 때문에 이것을 막연하게 묻는다면 ‑‑ 그리고 제가 장담할 수 있습니다! ‑‑ 제발 자유롭게 댓글을 달아 설명을 도와주세요!)


참조 솔루션

방법 1:

OK, when you create a timestamp with timezone (shortcut name timestamptz) pg creates a timestamp, and converts between the current timezone to GMT when storing it.

When you pull it out, you change the timezone setting to whatever you want to change it to some other offset. For example:

 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

You can shorten this up by using "at time zone" nomenclature:

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

no need to set each time zone over and over, just in the statement each time according to the proper timezone.

방법 2:

You can use pytz to do the conversions.

(by Chris RScott Marlowenmichaels)

참조 문서

  1. How do I convert the time stamps from a PostgreSQL DB into user‑time‑zone times? (CC BY‑SA 3.0/4.0)

#SQLAlchemy #Python #timestamp #postgresql #timezone






관련 질문

타임스탬프 열에서 연도만 검색하는 방법은 무엇입니까? (How to retrieve only the year from timestamp column?)

SQLAlchemy: 'in_'에 대한 필터는 효과가 없습니다. (SQLAlchemy: Filter on 'in_' has no effect)

sqlalchemy 쿼리 필터에 변수를 추가하고 문자열 쿼리로 변환하려면 어떻게 합니까? (How do I add a variable to a sqlalchemy query filter and convert it to a string query?)

자동 플러시를 비활성화하고 자동 커밋이 작동하지 않는 후 Flask sqlAlchemy (Flask sqlAlchemy after disable autoflush and autocommit not working)

R과 반짝이는 다층 테이블을 만드는 방법은 무엇입니까? (How to make multiple layered table form with R and shiny?)

sqlalchemy.exc.OperationalError 식별 (Identifying sqlalchemy.exc.OperationalError)

ImportError: 'PY2' 이름을 가져올 수 없습니다. (ImportError: cannot import name 'PY2')

SQLAlchemy: 부분적으로 지정된 관계 (SQLAlchemy: partially specified relationship)

SQLAlchemy를 사용하여 데이터베이스의 기존 테이블에 연결 (Connect to existing tables in database using SQLAlchemy)

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL 제약 조건 실패: user.words (sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: user.words)

날짜 시간에 대한 ValidationError (ValidationError for datetime)

pytest에서 SAWarning을 무시하는 방법 (How to ignore SAWarning in pytest)







코멘트