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。)是否应该有一个选项来指示在不期望时间时提供了时间,或者在没有提供时间时提供时间,则报错? - 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 在 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
最后修改: 2025-02-01 08:59:27 GMT