PEP 321 – 날짜/시간 파싱과 서식화
- Author:
- A.M. Kuchling <amk at amk.ca>
- Status:
- Withdrawn
- Type:
- Standards Track
- Created:
- 16-Sep-2003
- Python-Version:
- 2.4
- Post-History:
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
Python 2.3은 datetime 모듈에 여러 가지 간단한 날짜 및 시간 타입을 추가했습니다. 다양한 형식의 문자열을 파싱하여 이들 타입 중 하나에 해당하는 인스턴스를 반환하는 기능은 지원되지 않습니다. 이 PEP는 흔히 사용되는 여러 날짜 및 시간 형식을 위해 미리 정의된 파싱 함수군과 범용 파싱 기능을 추가할 것을 제안합니다.
datetime 모듈이 제공하는 타입은 모두 시간의 문자열 표현을 반환하는 .isoformat() 및 .ctime() 메서드를 가지고 있으며, .strftime() 메서드를 사용하여 새로운 형식을 구성할 수 있습니다. 이 밖에도 표준 라이브러리에 포함되면 유용할, 흔히 사용되는 형식이 여럿 있습니다. 이 PEP는 이러한 형식을 추가하는 방법도 제안합니다.
입력 형식
지원하면 유용할 형식은 다음과 같습니다:
- ISO8601
- ARPA/RFC 2822
- ctime
- 미국식 “MM/DD/YYYY”, 유럽식 “YYYY/MM/DD”처럼 사람들이 흔히 쓰는 형식과 “DD-Month-YYYY” 같은 변형 형식.
- CVS 스타일 또는 tar 스타일의 날짜(“tomorrow”, “12 hours ago” 등)
XXX Perl의 ParseDate.pm 모듈은 절대 형식과 상대 형식을 모두 포함하여 다양한 입력 형식을 지원합니다. 이 형식을 모두 지원하도록 시도해야 합니까?
선택지:
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")
미해결 질문:
- 사용할 명명 규칙.
- 오류가 발생하면 어떤 예외를 발생시켜야 합니까? ValueError입니까, 아니면 별도의 전용 예외입니까?
- 기대하는 타입을 사용자가 알고 있어야 합니까, 아니면 파싱 과정에서 알아내야 합니까? (예를 들어
parse_iso8601("yyyy-mm-dd")는date인스턴스를 반환하지만, “yyyy-mm-ddThh:mm:ss”를 파싱하면datetime을 반환합니다.) 시간이 없어야 할 곳에 시간이 주어지거나 시간이 주어지지 않은 경우 오류를 알리는 옵션이 있어야 합니까? - 국제화(I18N)를 위해 특별히 필요한 것이 있습니까? 시간대에 대해서는 어떻습니까?
범용 입력 파싱
datetime 타입을 반환하는 strptime() 구현으로 충분합니까?
XXX 충분하다면 여기에 strptime을 설명하십시오. 기존의 순수 Python 구현을 다른 대상에 맞게 쉽게 고칠 수 있습니까?
출력 형식
모든 입력 형식을 출력 형식으로 지원할 필요는 없습니다. YYYY/MM/DD 같은 단순한 형식은 strftime() 인자를 올바르게 지정하기가 매우 쉽기 때문입니다. 복잡한 형식만 지원하면 됩니다. 현재 제가 떠올릴 수 있는 것은 RFC 2822뿐입니다.
선택지:
- 미리 정의된 형식 문자열을 제공하여 다음과 같이 작성할 수 있게 합니다:
import datetime d = datetime.datetime(...) print d.strftime(d.RFC2822_FORMAT) # or datetime.RFC2822_FORMAT?
- 모든 객체에 새 메서드를 제공합니다:
d = datetime.datetime(...) print d.rfc822_time()
다른 언어의 관련 기능으로는 PHP date 함수가 있습니다(Simon Willison의 Python 구현은 http://simon.incutio.com/archive/2003/10/07/dateInPython 에 있습니다).
참고 문헌
그 밖의 유용한 링크:
http://www.egenix.com/files/python/mxDateTime.html http://ringmaster.arc.nasa.gov/tools/time_formats.html http://www.thinkage.ca/english/gcos/expl/b/lib/0tosec.html https://moin.conectiva.com.br/DateUtil
Copyright
This document has been placed in the public domain.