48. 파이썬에서 날짜를 다룰 수 있게 datetime 모듈을 제공해요.

안녕하세요. 언제나 휴일의 언휴예요. 이번에는 날짜를 표현하기 위해 제공하는 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')))
[그림 1] 실행화면
[그림 1] 실행화면

다음은 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
%pAM or PMAM, PM
%M00, 01, …, 59
%S00, 01, …, 59
%f마이크로 초000000, 000001, …, 999999
%zUTC 오프셋(empty), +0000, -0400, +1030
%ZTime zone name(empty), UTC, EST, CST
%j001, 002, …, 366
%U1년 중 몇 번째 주인가(0부터 시작, 일요일이 1주의 시작 요일)00, 01, …, 53
%W1년 중 몇 번째 주인가(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)
%%%문자%