시간대를 전환하려면 시간대를 사용하십시오. 시간대 사이의 시간 단위 오프셋 만 있으면됩니다. 날짜 / 시간 객체의 6 개 요소 모두에 경계를 두지 않아도됩니다. timedelta는 윤년, 윤년 등을 쉽게 처리합니다. 먼저해야합니다
from datetime import datetime, timedelta
그런 다음 offset
시간대 델타가 시간 인 경우 :
timeout = timein + timedelta(hours = offset)
여기서 timein 및 timeout은 datetime 객체입니다. 예 :
timein + timedelta(hours = -8)
GMT에서 PST로 변환합니다.
그래서 어떻게 결정 offset
합니까? 여기에 다른 함수가 잘 수행하는 시간대 "인식"인 datetime 객체를 사용하지 않고 변환 할 수있는 간단한 기능이 있습니다. 약간 수동이지만 때로는 선명도가 가장 좋습니다.
def change_timezone(timein, timezone, timezone_out):
'''
changes timezone between predefined timezone offsets to GMT
timein - datetime object
timezone - 'PST', 'PDT', 'GMT' (can add more as needed)
timezone_out - 'PST', 'PDT', 'GMT' (can add more as needed)
'''
# simple table lookup
tz_offset = {'PST': {'GMT': 8, 'PDT': 1, 'PST': 0}, \
'GMT': {'PST': -8, 'PDT': -7, 'GMT': 0}, \
'PDT': {'GMT': 7, 'PST': -1, 'PDT': 0}}
try:
offset = tz_offset[timezone][timezone_out]
except:
msg = 'Input timezone=' + timezone + ' OR output time zone=' + \
timezone_out + ' not recognized'
raise DateTimeError(msg)
return timein + timedelta(hours = offset)
많은 답변을보고 생각할 수있는 가장 엄격한 코드로 놀아 본 후 (현재) 시간이 중요하고 혼합 시간대를 고려해야하는 모든 응용 프로그램이 모든 datetime 객체를 만들기 위해 실제로 노력해야하는 것이 가장 좋습니다. "인식". 그렇다면 가장 간단한 대답은 다음과 같습니다.
timeout = timein.astimezone(pytz.timezone("GMT"))
예를 들어 GMT로 변환합니다. 물론 로컬 또는 다른 원하는 시간대로 변환하려면 pytz가 이해하는 적절한 시간대 문자열을 사용하십시오 (pytz.all_timezones에서). 그런 다음 일광 절약 시간도 고려됩니다.