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

Python으로 영문 날짜 문자열을 YYYY-MM-DD 형식으로 변환하는 프로그램

프로그래밍을 하다 보면 다양한 형식의 날짜 문자열을 표준 형식으로 변환해야 하는 경우가 자주 있습니다. 이번 글에서는 "Day Month Year"(일 월 년) 형식으로 작성된 영문 날짜 문자열을 YYYY-MM-DD 형식으로 변환하는 Python 프로그램을 만들어 보겠습니다.

문제 정의

입력으로 주어지는 날짜 문자열은 다음과 같은 조건을 가집니다.

  • 일(Day): 1st, 2nd, ..., 30th, 31st처럼 서수 접미사가 붙은 형태
  • 월(Month): Jan, Feb, ..., Nov, Dec처럼 영문 약어 형태
  • 연도(Year): 1900부터 2100 사이의 네 자리 숫자

예를 들어 입력이 "23rd Jan 2021"이라면, 출력은 2021-01-23이 되어야 합니다.

해결 접근 방식

이 문제는 다음 단계를 거쳐 해결할 수 있습니다.

  1. 영문 월 약어 목록을 준비합니다.
    Months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
  2. 날짜 문자열을 공백 기준으로 분할하여 [day, month, year] 형태의 리스트를 만듭니다.
  3. 연도(year)는 리스트의 세 번째 요소를 그대로 사용합니다.
  4. 일(day)은 첫 번째 요소에서 마지막 두 글자(서수 접미사)를 제거하여 추출합니다.
  5. 일이 한 자리 숫자라면 앞에 "0"을 붙여 두 자리로 만듭니다.
  6. 월(month)은 Months 리스트에서 해당 약어의 인덱스를 찾아 숫자로 변환합니다.
  7. 월 역시 한 자리 숫자라면 앞에 "0"을 붙입니다.
  8. 최종적으로 YYYY-MM-DD 형식의 문자열을 반환합니다.

Python 구현 예제

위 알고리즘을 실제 코드로 구현하면 다음과 같습니다.

def solve(date):
    Months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
              "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
    string = date.split()

    year = string[2]
    day = string[0][:-2]  # 마지막 두 글자(st, nd, rd, th) 제거

    if len(day) < 2:
        day = "0" + day   # 한 자리 일수는 앞에 0을 붙임

    month = str(Months.index(string[1]) + 1)

    if len(month) < 2:
        month = "0" + month  # 한 자리 월은 앞에 0을 붙임

    return "{0}-{1}-{2}".format(year, month, day)

date = "23rd Jan 2021"
print(solve(date))

실행 결과

입력

"23rd Jan 2021"

출력

2021-01-23

코드 설명

string[0][:-2] 슬라이싱은 문자열 끝의 두 글자를 제거하는 방법으로, 23rd에서 rd를 잘라내어 23만 남깁니다. 월 변환에는 리스트의 index() 메서드를 활용했는데, 인덱스가 0부터 시작하므로 1을 더해 실제 월 숫자(1~12)를 얻습니다.

참고로 실무에서는 Python의 내장 모듈인 datetime을 활용하면 더 간결하게 처리할 수도 있지만, 위 코드처럼 직접 구현하면 문자열 처리와 형식 변환의 원리를 명확히 이해할 수 있다는 장점이 있습니다.