안녕하세요. 언제나 휴일의 언휴예요. 이번에는 날짜를 표현하기 위해 제공하는 datetime 모듈을 간략하게 살펴볼게요.
datetime 모듈에서 제공하는 유용한 타입에는 date, time, datetime, timedelta, tzinfo, timezone 등이 있어요.
date : 날짜
time: 일시
datetime: 날짜와 일시
timedelta: 시간 계산
tzinfo: 지역화 시간 정보
timezone: 지역화 시간
여기에서는 오늘 날짜와 시각을 확인하는 것과 오늘 날짜에서 특정 일 수 이전의 날짜를 계산하는 것, 특정 시간 이후의 날짜와 시각을 확인하는 것 등을 해 볼게요.
먼저 datetime 모듈에서 자주 사용할 타입을 import 하세요.
#파이썬에서 날짜를 다룰 수 있게 datetime 모듈을 제공해요.
from datetime import date, time, datetime
오늘을 얻어올 때는 datetime의 now메서드를 이용하세요.
today = datetime.now() print(today)
특정 날짜(및 시각)을 기준으로 상대적인 날짜(및 시각)를 구할 때는 timedelta를 사용합니다. 입력 인자로 (days=9)라고 표현하면 9일 뒤를 계산해주며 (hours=9)를 전달하면 9시간 후를 계산합니다. 사용자로부터 몇일 전과 몇 시간 후를 입력받아 계산하는 부분을 작성해 보세요.
print("몇일 전 날짜를 원하시나요?") inp = int(input()) oneday = today + timedelta(days=-int(inp)) print("{0:d}전:{1!s}".format(inp,oneday)) print("몇 시간 후의 시각을 원하시나요?") inp = int(input()) thattime = today + timedelta(hours=int(inp)) print("{0:d}전:{1!s}".format(inp,thattime))
datetime은 빼기 연산을 통해 시간을 계산할 수 있어요.
gap = today - oneday print("{0!s}와 {1!s}의 차이:{2!s}".format(today,oneday,gap)) gap2 = today - thattime print("{0!s}와 {1!s}의 차이:{2!s}".format(today,thattime,gap))
원하는 형태로 출력할 때는 datetime의 strftime메서드를 이용합니다. 참고로 입력 인자로 ‘%x’는 날짜를 나타내며 ‘%X’는 시각을 나타냅니다.
print("오늘 날짜:{0!s}".format(today.strftime('%x'))) print("현재 시각:{0!s}".format(today.strftime('%X')))
다음은 현재까지 실습한 소스 코드와 실행 화면입니다.
#파이썬에서 날짜를 다룰 수 있게 datetime 모듈을 제공해요. from datetime import date, time, datetime, timedelta today = datetime.now() print(today) print("몇일 전 날짜를 원하시나요?") inp = int(input()) oneday = today + timedelta(days=-int(inp)) print("{0:d}전:{1!s}".format(inp,oneday)) print("몇 시간 후의 시각을 원하시나요?") inp = int(input()) thattime = today + timedelta(hours=int(inp)) print("{0:d}전:{1!s}".format(inp,thattime)) gap = today - oneday print("{0!s}와 {1!s}의 차이:{2!s}".format(today,oneday,gap)) gap2 = today - thattime print("{0!s}와 {1!s}의 차이:{2!s}".format(today,thattime,gap)) print("오늘 날짜:{0!s}".format(today.strftime('%x'))) print("현재 시각:{0!s}".format(today.strftime('%X')))
다음은 datetime 형식의 strftime 메서드에 입력 인자로 전달하는 값에 관한 표입니다.
표시 | 의미 | 예 |
%a | 요일을 짧게 표시 | Sun, Mon, …, Sat |
%A | 요일을 표시 | Sunday |
%w | 한 주에서 몇 번인지 표시(일요일은 0, 토요일은 6) | 0, 1, …, 6 |
%d | 달에서의 일 | 01, 02, …, 31 |
%b | 월을 간략하게 표시 | Jan, Feb, …, Dec |
%B | 월을 표시 | January |
%m | 월을 10진수로 표시 | 01, 02, …, 12 |
%y | 년도의 뒷2자리 | 00, 01, …, 99 |
%Y | 년도 | 0001, 0002, …, 2013, 2014, …, 9998, 9999 |
%H | 시(0~23) | 00, 01, …, 23 |
%I | 시(1~12) | 01, 02, …, 12 |
%p | AM or PM | AM, PM |
%M | 분 | 00, 01, …, 59 |
%S | 초 | 00, 01, …, 59 |
%f | 마이크로 초 | 000000, 000001, …, 999999 |
%z | UTC 오프셋 | (empty), +0000, -0400, +1030 |
%Z | Time zone name | (empty), UTC, EST, CST |
%j | 일 | 001, 002, …, 366 |
%U | 1년 중 몇 번째 주인가(0부터 시작, 일요일이 1주의 시작 요일) | 00, 01, …, 53 |
%W | 1년 중 몇 번째 주인가(0부터 시작, 월요일이 1주의 시작 요일) | 00, 01, …, 53 |
%c | 일시 | Tue Aug 16 21:30:00 1988 |
%x | 년월일 | 08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE) |
%X | 시분초 | 21:30:00 (en_US);21:30:00 (de_DE) |
%% | %문자 | % |