이하의 글은 2010년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.
Python의 datetime.datetime 병신 같은 두 가지
Python 표준 라이브러리에 있는 datetime.datetime
클래스의 잘못 설계된 부분:
두 개념이 하나의 자료형에서 공존하고 있다:
- 시간대(time zone) 없는 시각 정보를 담는 naive datetime와
- 시간대 정보가 함께 있는 tz-aware datetime
예상할 수 있듯 이 클래스는 저 두 가지가 하나의 자료형에서 공존하기 때문에 다형적으로 작동하지 않는다.
기본 시간대(
datetime.tzinfo
) 구현이 전혀 없다. 심지어 UTC조차! UTC 시간대의 tz-aware datetime 인스턴스를 만들고 싶다면, 먼저datetime.tzinfo
를 상속받는 UTC 클래스를 손수 작성해야 한다.1
뭐 어차피 시간대를 고려해야 하는 경우라면 pytz는 거의 필수고,Python 3.2부터는pytz.utc
를 쓰면 되지만 그래도 영 짜증나는 부분이 아닐 수 없다.datetime.timezone
이 추가됐다. UTC나 고정 오프셋만 필요하다면 그걸 쓰면 된다.↩