시간대는 어려운 문제입니다. 심지어 더 어려운 문제도 있다. 나는 파이썬에서 날짜 시간을 제대로 사용하기 시작했을 때 문제와 문제에 빠져 들었다. 그래서 나는 내 경험을 공유하기 위해 블로그를 작성하기로 결정.

“순진”및”인식”

가장 먼저 알아야 할 것은 파이썬에는 오프셋-순진 및 오프셋 인식의 두 가지 유형의 날짜 시간이 있다는 것입니다. 오프셋 순진은 날짜/시간에 시간대 정보가 없음을 의미합니다. 파이썬을 처음 사용하는 경우 매우 오류가 발생할 수 있습니다. 당신이 순진한 날짜 및 인식 날짜 시간을 혼합하면 오류가 발생합니다. 그리고 파이썬이 내장 된 시간대 지원을하지 않습니다,당신은 피츠,시간대 정보에 대한 모듈을 사용해야합니다.

import pytz
from datetime import datetimetznaive_datetime = datetime(2018, 1, 1, 12, 0)
tzaware_datetime = datetime(2018, 1, 1, 12, 0, tzinfo=pytz.utc)# this will raise an error
tznaive_datetime == tzaware_datetime

이러한 종류의 문제를 방지하려면 날짜/시간 객체가 항상 오프셋 순진 또는 항상 오프셋 인식되어 있는지 확인해야 합니다. 그러나 시간대를 다루는 것을 피할 수는 없으므로 가장 좋은 방법은 항상 오프셋 인식 날짜/시간으로 작업하는 것입니다.

파이썬 기본값은 순진한 날짜 시간입니다. now()은 로컬 시간대에서 순진한 날짜/시간을 반환하고utcnow()은 순진한 날짜/시간도 반환합니다. 당신은 일을 올바르게 얻으려면pytz모듈과tzlocal모듈이 필요합니다. 아래는 내가 올바른 시간대로 시간을 얻는 방법입니다.

import datetime
import pytz
import tzlocaldef utcnow():
return pytz.utc.localize(datetime.utcnow())def now():
return tzlocal.get_localzone().localize(datetime.now())

시간대와 구문 분석 날짜 시간

업데이트:이것은 단지 파이썬 2

의 문제입니다 또 다른 놀라운 파이썬strptime파서는 시간대와 함께 작동하지 않습니다. 아래 코드는 실패 할 것입니다.

>>> from datetime import datetime
>>> datetime.strptime('2017-11-15T12:00:00-0700', '%Y-%m-%dT%H:%M:%S%z')ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%m:%S%z'

시간대로 날짜/시간을 구문 분석하려면 다른 모듈python-dateutil이 필요합니다. 이것은 수학적으로 정확한 유형 계층구조인,강력한 타입을 정의합니다. 지금 당신은 시간대와 날짜 시간을 구문 분석 할 수 있습니다!오프셋 인식 날짜/시간을 조작 할 때주의해야 할 마지막 사항입니다. pytzdst()방법을 확인하여 날짜의 영향을 받는지 확인하는 데 도움이 됩니다.

>>> import pytz
>>> pst = pytz.timezone("US/Pacific")
>>> pst.localize(datetime(2017, 10, 1)).dst()
datetime.timedelta(0, 3600)
>>> pst.localize(datetime(2017, 12, 1)).dst()
datetime.timedelta(0)

참고:2017 년 11 월 5 일에 종료되었습니다. 따라서 11 월 5 일 이후의 날짜는timedelta(0)

이지만dst()정보는 날짜 시간

>>> (pst.localize(datetime(2017, 10, 1)) + timedelta(days=60)).dst()
datetime.timedelta(0, 3600)

을 조작 할 때 업데이트되지 않습니다….

pst.localize(yourdate.replace(tzinfo=None) + td).dst()

요약

파이썬에서 날짜 시간 작업 오류가 발생하기 쉽습니다. 파이썬은 날짜 및 시간대를 잘 지원하지 않기 때문입니다. 당신은 추가 모듈을 많이 사용해야합니다. 그러나 실제로 은색 총알이 있습니다,당신은 단지 화살표를 사용할 수 있습니다. 이 모듈은 파이썬 날짜 시간 모듈에 대한 교체를 제공합니다,그것은 항상 오프셋 인식,그리고 그것은 또한 내가 위에서 언급 한 모든 문제를 해결. 내가 걱정 될 수있는 유일한 것은 스파크와 같은 다른 외부 응용 프로그램과의 통합입니다.