반응형
질문
PostgreSQL에서는 시간대를 인식하는 timestamptz
필드가 있습니다. 테이블에서 데이터를 가져올 때 현재 시간을 빼서 나이를 구하려고 합니다.
문제는 datetime.datetime.now()
와 datetime.datetime.utcnow()
모두 시간대를 인식하지 않는 타임스탬프를 반환하는 것 같아서 다음과 같은 오류가 발생합니다:
TypeError: can't subtract offset-naive and offset-aware datetimes
이를 피하는 방법은 있을까요 (가능하면 제3자 모듈을 사용하지 않고)?
편집: 제안해주신 방법에 감사드립니다. 하지만 시간대를 조정하려고 시도하면 오류가 발생하는 것 같아서 PG에서 시간대를 인식하지 않는 타임스탬프를 사용하고 항상 다음과 같이 삽입하기로 결정했습니다:
NOW() AT TIME ZONE 'UTC'
이렇게 하면 모든 타임스탬프가 기본적으로 UTC로 설정됩니다 (비록 조금 더 귀찮은 방법이지만).
답변
시간대 인식을 제거해보았습니까?
출처: http://pytz.sourceforge.net/
naive = dt.replace(tzinfo=None)
시간대 변환을 추가해야 할 수도 있습니다.
편집: 이 답변의 나이를 고려해주세요. 파이썬 3에서 시간대 정보를 추가하는 대신 제거하는 답변은 다음과 같습니다. https://stackoverflow.com/a/25662061/93380
반응형
댓글