파이썬 datetime 모듈 - 날짜, 시간, 타임존 출력하기

2021. 8. 11. 15:32캐리의 데이터 세상/파이썬

반응형

파이썬 기초 문법 중 날짜와 시간 관련 datetime 모듈 정리합니다. 현재 날짜와 시간을 나타내거나 원하는 국가의 타임존을 출력, strftime() 메서드 사용해서 포맷 문자열을 나타내는 것까지 파이썬 docs 문서 참고해서 예시와 함께 나타내 보겠습니다.

1. datetime 모듈 개요

datetime 모듈은 날짜와 시간을 간단하거나 복잡한 방법으로 조작하는 클래스를 제공함. datetime 모듈은 다음과 같이 상수를 내보내는데, datetime 객체에서 허용되는 가장 작은 연도와 큰 연도는 다음과 같다.

import datetime datetime.MINYEAR ==> 1 #date나 datetime 객체에서 허용되는 가장 작은 연도 번호. MINYEAR는 1 datetime.MAXYEAR ==> 9999 #date나 datetime 객체에서 허용되는 가장 큰 연도 번호. MAXYEAR는 9999.




사용 가능한 타입(Available Types)

  • datetime.date (Attributes : year, month, day)
  • datetime.time (Attributes : hour, minute, second, microsecond, tzinfo)
  • datetime.datetime (Attributes: year, month, day, hour, minute, second, microsecond, tzinfo)
  • datetime.timedelta (두 date, time 또는 datetime 인스턴스 간의 차이를 마이크로초 해상도로 나타내는 기간)
  • datetime.tzinfo (시간대 정보 객체의 추상 베이스 클래스. 이것들은 datetime과 time 클래스에서 사용자 정의할 수 있는 시간 조정 개념(예를 들어, 시간대와/나 일광 절약 시간을 다루는 것)을 제공하기 위해 사용)
  • datetime.timezone (tzinfo 추상 베이스 클래스를 구현하는 클래스로, UTC로부터의 고정 오프셋을 나타냅니다)

2. 파이썬 - 현재 날짜 시간 확인하기

  • datetime.today()는 타임존(tz)가 별도로 지정이 되어 있지 않으면 tzinfo가 None인 현재 지역의 datetime을 반환합니다.
  • datetime.now()는 현재의 지역 날짜와 시간을 반환, tz가 None이거나 지정되지 않으면, today()와 유사.
  • datetime.utcnow()는 tzinfo가 None인 현재 UTC 날짜와 시간을 반환. now()와 비슷하지만, 현재의 UTC 날짜와 시간을 나이브 datetime 객체로 반환.

임의로 만든 now_local에 반환된 날짜와 시간을 저장합니다.

from datetime import datetime as dt dt.now() # datetime.datetime(2021, 8, 11, 5, 11, 0, 322140) dt.utcnow() # datetime.datetime(2021, 8, 11, 5, 11, 12, 137984) dt.today() # datetime.datetime(2021, 8, 11, 5, 11, 18, 526106) now_local = dt.now() now_local ==> datetime.datetime(2021, 8, 11, 5, 11, 44, 107766)


datetime.datetime의 어트리뷰트를 하나씩 찍어보면 다음과 같습니다.

now_local.year, now_local.month, now_local.day, now_local.hour, now_local.minute, now_local.second, now_local.microsecond # (2021, 8, 11, 5, 11, 44, 107766)




strftime() 사용해서 날짜와 시간을 타나내는 문자열을 반환해 보겠습니다. datetime.now() 또는 datetime.utcnow()을 사용해서 반환된 날짜와 시간을 활용합니다.

now_local.strftime('%Y년 %m월 %d일 %a요일 %p %H시 %M분 %S초') #2021년 08월 11일 Wed요일 AM 05시 11분 44초


포맷 코드 목록은 다음과 같습니다. 바로 위 코드 예시에서 % 다음에 위치하는 문자열(지시자)의 쓰임새는 아래와 같이 다양합니다.

지시자 의미

3. 파이썬으로 한국 시간 읽어오기

타임존을 변경하기 위해 pytz 파이썬 라이브러리를 먼저 불러옵니다. pytz.timezone(타임존 시간대)를 먼저 실행한 후에 KST(한국 타임존)에 담아주고 now()로 반환된 값이 저장된 now_local을 astimezone(KST)를 실행하여 now_kst(현재 한국 시간)에 담아주고 strftime()을 사용해 문자열로 반환해 보겠습니다.

import pytz from datetime import tzinfo, datetime UTC = pytz.timezone('UTC') KST = pytz.timezone('Asia/Seoul') now_local = datetime.now() now_kst = now_local.astimezone(KST) now_kst.strftime('%Y년 %m월 %d일 %a요일 %p %H시 %M분 %S초') #2021년 08월 11일 Wed요일 PM 14시 51분 06초 now_kst.tzinfo #<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>

마지막 코드인 tzinfo로 반환된 값에서 KST 타임존을 확인할 수 있습니다. 상위의 dt.now()로 시간을 읽었을 땐 타임존 정보가 없었지만 timezone 실행 후에는 반영이 되는 것을 확인할 수 있습니다.

4. pytz 라이브러리 시간대 목록

파이썬에서 pytz 라이브러리를 활용해서 사용 가능한 모든 타임존 시간대 목록은 다음과 같이 불러올 수 있습니다. 한국 타임존을 불러올 때는 라이브러리에 저장되어 있는 명칭 그대로를 써야겠죠. 먼저 len 함수를 써서 시간대가 몇 개 저장되어 있는지 살펴보면,

from pytz import common_timezones from pytz import all_timezones len(pytz.all_timezones) #592 len(pytz.common_timezones) #440


아래와 같이 내장된 타임존 리스트를 불러오면 다음과 같습니다. 공식 시간대 식별자 수백 개가 저장되어 있으니 직접 불러와서 확인해 보세요. 예를 들면 에티오피아 시간대를 알고 싶으면 아디스아바바 'Africa/Addis_Ababa' 로 접근해서 현지 시간을 확인할 수 있습니다.

common_timezones_list = common_timezones[:] common_timezones_list.sort() common_timezones_list """['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', (중략) 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Thimphu', 'Asia/Tokyo', (중략) """




그럼 지금까지 정리한 내용을 활용해서 현재 에티오피아 아디스아바바의 시간대를 확인해 보겠습니다. 한국 시간대의 정식 명칭인 KST(Korea Standard Time)이나 표준 시간대를 나타내는 UTC와 같은 축약어가 에티오피아는 뭔지 모른다고 가정하고 임의로 설정해도 타임존 결괏값에 시간대가 반환되니 실행시켜 보겠습니다.

import datetime import pytz ABA = pytz.timezone('Africa/Addis_Ababa') now_aba = datetime.datetime.now().astimezone(ABA) now_aba.strftime('%Y/%m/%d %a/%p/%H/%M/%S') #2021/08/11 Wed/AM/09/22/23 now_aba.tzinfo #<DstTzInfo 'Africa/Addis_Ababa' EAT+3:00:00 STD> now_aba #datetime.datetime(2021, 8, 11, 9, 22, 23, 52463, tzinfo=<DstTzInfo 'Africa/Addis_Ababa' EAT+3:00:00 STD>)

아디스아바바의 현지시간은 EAT(Eastern Africa Time)이며 표준시간대인 UTC와 3시간 차이 나는 것을 확인할 수 있습니다.

보다 자세한 파이썬 datetime 모듈 활용법은 공식 문서를 참고해주세요. 한국어 지원됩니다.


▼ 참고글

IPython 매직 명령어 모음
파이썬으로 지수함수 그래프 그리기
파이썬 0~1 스케일링 최소 최대 MinMaxScaler
파이썬 - 주피터 노트북(Jupyter Notebook) 단축키 모음

반응형