[python] datetime 사용하여 날짜, 시간 출력하기

이번 글에서는 파이썬에서 날짜, 시간을 출력하는 방법에 대해 알아보겠습니다.

파이썬에서는 날짜, 시간을 다룰 수 있는 datetime 모듈을 제공합니다.

from datetime import datetime # 날짜/시간

datetime 모듈의 datetime 클래스는 이름에서 보이다시피 날짜와 시간 둘다 포함하는 클래스입니다.
만약 날짜만 사용한다거나, 시간만 사용하는 경우엔 아래와 같이 date 또는 time 클래스를 사용하면 됩니다.

from datetime import date # 날짜
from datetime import time # 시간

이 글에서는 datetime 클래스에 대해서만 알아보겠습니다.

datetime 객체 얻기

아래와 같이 코딩해서 현재 날짜/시간이 담겨져 있는 datetime 객체를 얻습니다.

now = datetime.now() # 현재 날짜/시간
현재 날짜/시간 출력하기

얻어온 객체에서 아래와 같이 print하면 현재 날짜/시간을 출력할 수 있습니다.

print("현재:", now)
print("현재 날짜:", now.date()) # 날짜
print("현재 시간:", now.time()) # 시간
print("현재 타임스탬프:", now.timestamp()) # 타임스탬프 - 1970년 1월 1일 0시 0분 0초부터 경과시간

개별로 출력하기

년, 월, 일, 시, 분, 초, 마이크로초를 각각 확인하려면 아래와 같이 입력하여 출력합니다.

print("년:", now.year)
print("월:", now.month)
print("일:", now.day)
print("시:", now.hour)
print("분:", now.minute)
print("초:", now.second)
print("마이크로초:", now.microsecond)

요일 출력하기

요일을 확인하려면 weekday 함수를 사용하면 됩니다.

print("요일:", now.weekday()) # 0 ~ 6(월요일 ~ 일요일)

출력되는 값은 문자열이 아니라 정수입니다. 0부터 6까지 값을 출력하며 0부터 월요일을 의미하며, 6은 일요일을 의미합니다.
한글로 출력하려면 아래와 같이 입력하면 됩니다.

str_weekday = ["월", "화", "수", "목", "금", "토", "일"]
print(str_weekday[now.weekday()] + "요일")

날짜/시간을 문자열로 바꾸기

한국의 경우 ‘년-월-일’ 순서대로 표시하지만 외국의 경우 ‘월-일-년’으로 표시합니다.
이렇게 날짜/시간 표시를 다르게 할 경우 strftime 함수를 사용하면 편합니다.
아래 코드는 strftime의 예제 코드입니다.

print(now.strftime("%A %m-%d %y")) # 요일 월-일 년
print(now.strftime("%B %d %a %Y")) # 월 일 요일 년
print(now.strftime("%m-%d %I%p")) # 월-일 시am/pm

위와 같이 자신이 원하는 문자열 형식으로 날짜/시간을 변환할 수 있습니다.
아래는 strftime과 관련된 지시문입니다.

지시문의미예시
%a요일 – 약어Sun, Mon, …, Sat (en_US);
So, Mo, …, Sa (de_DE)
%A요일 – 풀네임Sunday, Monday, …, Saturday (en_US)
Sonntag, Montag, …, Samstag (de_DE)
%w요일 – 숫자(0: 일요일, 6: 토요일)0, 1, …, 6
%d일 – 0으로 패딩된 10진수01, 02, …, 31
%b월 – 약어Jan, Feb, …, Dec (en_US)
Jan, Feb, …, Dez (de_DE)
%B월 – 풀네임January, February, …, December (en_US)
Januar, Februar, …, Dezember (de_DE)
%m월 – 0으로 패딩된 10진수01, 02, …, 12
%y년 – 2자리 수00, 01, …, 99
%Y년 – 4자리수0001, 0002, …, 2013, 2014, …, 9998, 9999
%H시(24시간 표기) – 0으로 패딩된 10진수00, 01, …, 23
%I시(12시간 표기) – 0으로 패딩된 10진수01, 02, …, 12
%pAM 또는 PMAM, PM (en_US)
am, pm (de_DE)
%M분 – 0으로 패딩된 10진수00, 01, …, 59
%S초 – 0으로 패딩된 10진수00, 01, …, 59
%f마이크로초 – 0으로 패딩된 6자리 10진수000000, 000001, …, 999999
%zUTC offset in the form ±HHMM[SS[.ffffff]]
(empty string if the object is naive).
(empty), +0000, -0400, +1030, +063415, -030712.345216
%Z타임존 이름
(empty string if the object is naive).
(empty), UTC, GMT
%j일 – 1년중 몇 일인지 확인할 때 유용, 0으로 패딩된 10진수001, 002, …, 366
%U주 – 1년중 몇 주인지 확인할 때 유용, 0으로 패딩된 10진수
새해에 첫 번째 일요일 이전의 모든 날은 주 0으로 간주, 일요일을 주의 첫번째 요일로 간주
00, 01, …, 53
%W주 – 1년중 몇 주인지 확인할 때 유용, 0으로 패딩된 10진수
새해에 첫 번째 월요일 이전의 모든 날은 주 0으로 간주, 월요일을 주의 첫번째 요일로 간주
00, 01, …, 53
%c지역의 날짜와 시간 표현Tue Aug 16 21:30:00 1988 (en_US)
Di 16 Aug 21:30:00 1988 (de_DE)
%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)
%%% 표현%
문자열에서 날짜/시간 얻기

문자열에서 날짜/시간을 얻는 strptime 함수가 있습니다. 위 strftime 함수와 반대로 변환한다고 보시면 됩니다.
아래는 샘플 코드입니다.

get_datetime = datetime.strptime("18:30:00 2022-10-05", "%H:%M:%S %Y-%m-%d")
print(get_datetime)

이상으로 datetime 모듈 사용법에 대해 알아보았습니다.