이번 글에서는 파이썬에서 날짜, 시간을 출력하는 방법에 대해 알아보겠습니다.
파이썬에서는 날짜, 시간을 다룰 수 있는 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 |
%p | AM 또는 PM | AM, 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 |
%z | UTC 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 모듈 사용법에 대해 알아보았습니다.