Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python strftime으로 '8월 5일'처럼 날짜에 서수 접미사(st, nd, rd, th) 표시하는 방법

Python의 strftime 함수는 날짜와 시간을 다양한 형식으로 손쉽게 출력할 수 있지만, 영어 날짜에서 흔히 쓰이는 서수 접미사(st, nd, rd, th)를 지원하는 형식 지시자(directive)는 존재하지 않습니다. 즉, "Jan 15th"나 "Aug 5th"처럼 출력하려면 strftime만으로는 불가능합니다.

해결 방법은 의외로 간단합니다. 일(day) 값에 따라 알맞은 접미사를 반환하는 사용자 정의 함수를 만들고, 그 결과를 strftime의 형식 문자열 뒤에 덧붙이면 됩니다.

서수 접미사의 기본 규칙

  • 11일, 12일, 13일은 예외적으로 모두 "th"를 사용합니다.
  • 1일 → "st", 2일 → "nd", 3일 → "rd" (21일, 22일, 23일, 31일도 동일)
  • 나머지 날짜는 모두 "th"를 사용합니다.

예제 코드

from datetime import datetime

now = datetime.now()

def suffix(day):
    # 4~20일, 24~30일은 모두 "th"
    if 4 <= day <= 20 or 24 <= day <= 30:
        return "th"
    # 나머지는 일의 자리 숫자에 따라 st, nd, rd 결정
    return ["st", "nd", "rd"][day % 10 - 1]

my_date = now.strftime("%b %d") + suffix(now.day)
print(my_date)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Jan 15th

코드 설명

suffix() 함수는 먼저 해당 날짜가 4~20일 또는 24~30일 범위에 속하는지 확인합니다. 이 범위에 있으면 무조건 "th"를 반환하고, 그렇지 않으면 일의 자리 숫자(day % 10)를 인덱스로 활용해 리스트 ["st", "nd", "rd"]에서 적절한 접미사를 꺼내옵니다. 11~13일은 첫 번째 조건(4~20일)에 포함되므로 자동으로 "th"가 적용됩니다.

참고: 날짜 앞자리 0 제거하기

%d 지시자는 항상 두 자리 숫자(예: 05)를 출력합니다. "Aug 5th"처럼 앞자리 0 없이 표시하고 싶다면 운영체제별 확장 지시자를 사용할 수 있습니다.

  • Linux / macOS: now.strftime("%b %-d")
  • Windows: now.strftime("%b %#d")

이 방법을 활용하면 strftime의 기본 한계를 보완하면서도 원하는 날짜 형식을 깔끔하게 구현할 수 있습니다.