python 초보 벗어나기 2편: datetime moudle 기초

운명애·2021년 1월 2일
1

Python

목록 보기
4/7

datetime 모듈은 파이썬 내장 모듈로 날짜와 시간 정보를 다룰 때 이용한다.

가끔씩 날짜를 표현하고 싶을 때 검색해서 사용하곤 했는데, 정리를 하나도 안해놓아서 매번 까먹었다.

이번에 유튜브에서 기초적인 내용을 잘 정리한 영상을 보고 참고하여 나름대로 정리해보려고 한다.

datetime

datetime 모듈을 일단 import 해준다.

단순하게 날짜나 시간정보를 표기하는 방법부터 보자.

날짜를 나타낼 때는 datetime.date(년도, 월, 일) 순서대로 쓰면 된다. 주의할 점은 월, 일을 쓸 때 앞에 0 을 붙이면 안된다. (2021, 07, 02) 말고 (2021, 7, 2) 이렇게 써야한다.

시간은 datetime.time(시간, 분, 초, 밀리세컨즈) 로 쓰면 된다. 밀리세컨즈를 생략하면 시간, 분, 초 까지 나온다.

하지만 위에서 소개한 시간 방법은 잘 이용하지 않는다. datetime.datetime 으로 날짜와 시간을 둘 다 얻을 수 있기 때문이다.

datetime.datetime

datetime.datetime(년, 월, 일, 시간, 분, 초, 밀리세컨즈) 로 쓰면 된다.

요일 기준으로 오늘 요일에 해당하는 숫자를 반환할 수도 있다.

월요일이 0 에 해당하게 하고 싶으면 weekday() 를, 1 에 해당하게 하고 싶으면 isoweekday() 를 쓴다.

datetime.timedelta

날짜와 관련된 연산을 할 때는 datetime.timedelta 객체가 필요하다.

연산시 다음을 주의:
date 객체 + timedelta 객체 = date 객체
date 객체 - date 객체 = timedelta 객체

date 객체 사이의 + 연산은 없다.

Timezone

위 코드를 살펴보면 오늘 날짜를 불러낼 때 datetime.datetime.today() 를 쓸 때도 있고, datetime.datetime.now() 를 쓴 것도 볼 수 있다.

datetime module 에는 현재를 불러낼 때 위 두 가지와 utcnow 를 포함해 3 가지 경우가 있다.

차이점은 timezone 정보 유무 이다.

today 는 timezone 정보를 담고 있지 않기 때문에 naive (순진한) 하다고 한다.

now 와 utcnow 는 timezone 정보를 가질 수 있고 default 값이 none 으로 설정되어 있다.

따라서 now 는 로컬 타임을, utcnow 는 utc 기준 현재 시간을 보여준다. 아래 now 와 utcnow 의 시간이 차이가 나는 것을 확인하자.

timezone 정보를 담기 위해 다른 모듈을 하나 더 import 해야 한다.

이 때, 파이썬 내장 모듈말고 pytz 라는 모듈을 설치해서 사용할 것이다.

파이썬 공식문서에서도 자기네거 말고 pytz 설치해서 쓰라고 권장한다. 이유는 공식문서 ㄱㄱ

먼저 터미널(또는 커맨드라인)에서 pip install pytz 라고 입력하고 pytz 를 설치한다.

그리고 파이썬 스크립트로 돌아와서 import pytz 해준다. 아래는 local date 에 timezone 적용하는 코드

timezone 을 먼저 정의하고 local date 를 timezone 적용한 date 로 바꿀 수도 있다.

pytz.timezone('타임존지역') 을 입력해야 하는데, 타임존 지역은 pytz.all_timezones 에 저장 되어있다.

루프를 돌리면 확인할 수 있다.

정보가 많으니 아시아 지역만 확인해보자.

string 으로 변환하기, vice-versa

이제 datetime 객체를 string 으로 표기하는 방법에 대해서 알아보자.

아주 다양한 모습으로 datetime 을 string 으로 변환할 수 있다.

datetime 객체.strftime('포멧형식') 이 변환하는 방법이다.

포멧형식은 파이썬 공식 문서를 통해 확인할 수도 있고
https://strftime.org/ 여기처럼 포멧형식만 모아놓은 사이트도 있다.

string 으로 표현된 날짜를 datetime 객체로 바꾸는 방법도 있다. 위 코드 처럼 datetime.datetime.strptime(string날짜, 'string날짜의 포멧형식') 을 쓰면 된다.

strftime 은 time 을 string 으로 'f'ormat 한다고 생각하면 기억하기 쉽고 strptime 은 string 을 'p'arse 해서 time 으로 변환한다고 생각하면 된다.

profile
개발자 하고 싶어요..

0개의 댓글