Python/Utils

[Python] Datetime 이해 - aware, naive, datetime, timezone 등

yubi5050 2023. 5. 29. 03:07

Datetime 패키지 이해하기

Python에서 기본적으로 제공하는 Datetime 패키지에 대해 이해해 본다.

- Datetime 모듈은 date와 time에 대한 조작을 위해 사용된다.

 

Datetime 모듈 예시

1. naive vs aware

- 해당 패키지에서 사용되는 날짜/시간 객체는 timezone 포함 여부에 따라 naive와 aware로 구분된다.

- naive : tzinfo 정보를 포함하지 않는 날짜, 시간 객체

- aware : tzinfo, DST(daylight saving time) 정보를 포함한 날짜, 시간 객체

- 활용 1) 들어오는 datetime 값 (aware인지 naive인지)에 대한 형태 정의

- 활용 2) tzinfo 체크 및 시간대 변경

- 활용 3) tzinfo 존재 여부로 naive인지 aware인지 판별 가능

 

2. date 모듈

- datetime 하위 모듈로 주로 연도/월/일 을 다루는데 사용

- 기본 선언형 : date(year, month, day)

- 활용 1) date.today() : 오늘 날짜

- 활용 2) date + timedelta : 날짜 비교 등

- 활용 3) date.fromisoformat('20191204') -> datetime.date(2019, 12, 4) : iso 포맷 문자열 ->  date 변환

- 활용 4) date.isoformat() : date -> iso 포맷 문자열 변환

- 활용 4) date.weekday() : 요일 반환

 

3. time 모듈

- datetime 하위 모듈로 주로 시/분/초/밀리초/타임존 등을 다루는데 사용

- 기본 선언형 : time(hour, minute, second, microsecond, tzinfo)

- 활용 1) time.isoformat() : time 의 isoformat 계산 ex) 09:10:30+09:00

- 활용 2) time.tzname(), timezone.dst() : timezone의 이름 구하기 , 

- 활용 3) time.strftime("%H:%M:%S %Z") : time 객체를 특정 형식 문자열로 표현

 

4. datetime 모듈

- datetime 패키지의 하위 모듈로 일반적으로 가장 많이 쓰이는 형태

- 앞선 date, time을 총괄한 연/월/일/시/분/초/밀리초/타임존을 포괄한 날짜 형태를 다루는데 사용

- 앞선 date. time의 기능등을 대부분 포괄함

- 활용 1) datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") : datetime 객체를 특정 형식 문자열로 표현

- 활용 2) datetime.combine(date, time) : date 객체와 time 객체 merge

- 활용 3) dateimte.isoformat() : datetime 객체를 isoformat으로 변환

- 활용 4) datetime.fromisoformat('2023-12-05T00:05:23Z') : 문자열(isoformat)을 datetime 객체로 변환 (추가 예제 링크)

- 활용 5) dateimte.now() : 현재의 날짜, 시간을 구함

- 활용 6) datetime.date(), datetime.time() : 날짜, 시간 분리

- 활용 7) datetime + timedelta : 날짜 + 시간 통합 비교

- 활용 8) datetime.timetuple(): date, time 값들을 tuple 형태로 반환 (year ~ weekday ~ dst 등)

 

5. timedelta 모듈

- datetime 패키지의 하위 모듈로 날짜나 시간의 차이를 구하는데 주로 사용

- 기본형 : timedelta(days, seconds, microseconds, milliseconds, minutes, hours, weeks)

- 활용 1) timedelta(days=365) : 기존 날짜에서 - 1년 전/후 계산시

 

6. timezone, tzinfo 모듈

timezone은 tzinfo의 subclass로 

공식 Docs : https://docs.python.org/3/library/datetime.html

 

 

7. strftime(), strptime() 차이

- strftime(format) : 객체를 문자열로 변환 (date, time, datetime 모두 지원)

- strptime(date_string, format) : 문자열을 datetime 형태로 변환 (datetime 에서만 지원)

- 활용 1) date().strftime('%Y-%M-%d')

- 활용 2) strptime('2023-12-08', "%Y-%M-%d')

- 추가 format에 대한 코드 링크

 

8. 기타 패키지, 모듈 (dateutils)

- dateutil.relateivedelta 를 활용 

- 두 날짜 시간 객체 간의 차이를 구할 수 있음.

- ex) delta = relativedelta(end_at, start_at)

 

 

참고 링크