PEP 321 – 日期/时间解析和格式化
- 作者:
- A.M. Kuchling <amk at amk.ca>
- 状态:
- 已撤回
- 类型:
- 标准跟踪
- 创建:
- 2003年9月16日
- Python版本:
- 2.4
- 历史记录:
摘要
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风格的日期(“明天”,“12小时前”等)。
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
。)如果在不需要时间的情况下提供了时间,或者在需要时间的情况下没有提供时间,是否应该有一个选项来发出错误信号? - 国际化需要任何特殊处理吗?对于时区呢?
通用输入解析
是否只需要一个返回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在http://simon.incutio.com/archive/2003/10/07/dateInPython处的Python实现)
参考文献
其他有用链接
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
版权
本文档已进入公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0321.rst