[Withdrawn] PEP 321 - Date/Time Parsing and Formatting

수정: 2025년 9월 26일

원문 링크: PEP 321 - Date/Time Parsing and Formatting

상태: Withdrawn | 유형: Standards Track | 작성일: 16-Sep-2003

PEP 321: 날짜/시간 구문 분석 및 형식 지정 (Date/Time Parsing and Formatting)

개요

PEP 321은 Python의 datetime 모듈에 문자열 형태의 날짜 및 시간을 파싱(구문 분석)하고, 다양한 형식으로 출력하는 기능을 추가하는 것을 제안했던 문서입니다. 이 제안은 datetime 모듈에 미리 정의된 여러 일반적인 날짜 및 시간 형식에 대한 파싱 함수와, 더 범용적인 파싱 기능을 추가하는 것을 목표로 했습니다.

상태: Withdrawn (철회됨) 작성일: 2003년 9월 16일 Python 버전: 2.4

도입 배경

Python 2.3에서 datetime 모듈에 간단한 날짜 및 시간 타입이 추가되었지만, 다양한 형식의 문자열을 파싱하여 해당 datetime 타입 인스턴스로 반환하는 기능은 없었습니다. 또한 datetime 모듈의 타입들은 .isoformat().ctime() 메서드를 통해 문자열 표현을 반환하고, .strftime() 메서드를 사용하여 새로운 형식을 구성할 수 있었지만, 표준 라이브러리에 포함되면 유용할 추가적인 일반 사용 형식들이 있었습니다. 이 PEP는 이러한 부족한 점을 해결하고자 제안되었습니다.

입력 형식 (Input Formats)

PEP 321에서 지원할 만한 유용한 입력 형식으로 다음과 같은 것들이 제안되었습니다.

  • ISO8601: 국제 표준 날짜 및 시간 형식.
  • ARPA/RFC 2822: 이메일 등에 사용되는 날짜 형식.
  • ctime: 운영체제에서 자주 사용되는 짧은 날짜/시간 형식.
  • 사람이 흔히 작성하는 형식:
    • 미국식 "MM/DD/YYYY"
    • 유럽식 "YYYY/MM/DD"
    • "DD-Month-YYYY"와 같은 변형.
  • CVS 또는 tar 스타일 날짜: "tomorrow", "12 hours ago" 등 상대적인 시간 표현.

고려되었던 옵션들:

  • datetime 모듈에 함수 추가:
    import datetime
    d = datetime.parse_iso8601("2003-09-15T10:34:54")
    
  • 각 타입에 클래스 메서드 추가: .now()와 같은 기존 클래스 메서드들과 자연스럽게 어울릴 수 있다고 보았습니다.
    import datetime
    d = datetime.date.parse_iso8601("2003-09-15T10:34:54")
    
  • 별도의 모듈 또는 서브패키지 추가: date, date_parse, parse_date 등의 모듈이나 datetime.parser와 같은 서브패키지에 파싱 함수를 포함.
    import datetime
    d = datetime.parser.parse_iso8601("2003-09-15T10:34:54")
    

미해결 질문들:

  • 사용할 명명 규칙 (Naming convention).
  • 오류 발생 시 어떤 예외(exception)를 발생시킬 것인가? ValueError 또는 특정 예외?
  • 파싱 전에 어떤 타입을 예상하는지 알아야 하는가, 아니면 파싱 자체가 타입을 결정해야 하는가? (예: "yyyy-mm-dd"는 date 인스턴스를 반환하고, "yyyy-mm-ddThh:mm:ss"는 datetime을 반환).
  • 시간이 예상되지 않는 곳에 시간이 제공되거나, 시간이 제공되지 않을 경우 오류를 알리는 옵션이 필요한가?
  • 국제화(I18N) 및 시간대(time zones) 처리를 위한 특별한 요구사항이 있는가?

범용 입력 파싱 (Generic Input Parsing)

datetime 타입을 반환하는 strptime() 구현으로 충분한지에 대한 질문이 있었습니다. 기존 순수 Python으로 구현된 strptime()이 쉽게 재활용될 수 있는지도 논의되었습니다.

출력 형식 (Output Formats)

모든 입력 형식이 출력 형식으로 지원될 필요는 없다고 보았습니다. YYYY/MM/DD와 같은 간단한 형식은 strftime() 인수를 통해 쉽게 처리할 수 있기 때문에, 복잡한 형식(예: RFC 2822)만 지원할 것을 고려했습니다.

고려되었던 옵션들:

  • 미리 정의된 형식 문자열 제공:
    import datetime
    d = datetime.datetime(...)
    print d.strftime(d.RFC2822_FORMAT) # 또는 datetime.RFC2822_FORMAT?
    
  • 모든 객체에 새로운 메서드 제공:
    d = datetime.datetime(...)
    print d.rfc822_time()
    

결론

PEP 321은 datetime 모듈의 파싱 및 형식 지정 기능을 확장하려는 중요한 시도였지만, 최종적으로 철회되었습니다. 하지만 이 PEP에서 논의되었던 많은 아이디어와 요구사항은 이후 Python의 datetime 모듈 기능 개선에 영향을 미쳤을 것으로 추정됩니다. 특히, strptime의 필요성에 대한 언급은 현재 datetime 모듈의 datetime.strptime() 메서드의 중요성을 시사합니다.

참고 자료 (References)

저작권 (Copyright)

이 문서는 퍼블릭 도메인(public domain)으로 지정되었습니다.

⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.

태그

#Python#PEP#Translation