用Python存储时间 - 最佳格式?

时间:2009-12-15 16:33:37

标签: python datetime

在Python中存储时间(在我的情况下在ZODB中,但适用于任何数据库),您使用什么格式(纪元,日期时间等)以及为什么?

3 个答案:

答案 0 :(得分:5)

datetime模块具有现代Python处理日期和时间的标准类型,我使用它因为我喜欢标准(我也认为它设计得很好);我通常还通过pytz获得时区信息。

当然,大多数数据库都有自己标准的日期和时间存储方式,但是来自数据库的现代Python适配器通常支持datetime(使用它的另一个好理由;-)在Python端事情 - 例如,我使用Google App Engine的存储,Python自己的嵌入式SQLite等等。

答案 1 :(得分:5)

如果数据库具有本机日期时间格式,即使涉及编码和解码,我也尝试使用它。即使这不是100%标准,如SQLITE,我仍然会使用SQLITE3 help page底部附近描述的日期和时间适配器。

在所有其他情况下,我会使用ISO 8601 format,除非它是一个Python对象数据库,它存储对象的某种二进制编码。

ISO 8601格式是可排序的,在数据​​库中通常需要用于索引。此外,它是明确的,所以你知道2009-01-12是在1月,而不是在12月。改变月份和日期位置的人总是把年份放在最后,所以把它放在第一位会阻止人们自动假设格式不正确。

当然,您可以根据需要重新格式化应用程序中的显示和输入,但数据库中的数据通常可以使用其他工具查看,而不是应用程序。

答案 2 :(得分:0)

秒,因为纪元是用于存储时间数据的最紧凑和便携的格式。例如,MySQL中的原生DATETIME格式需要8个字节而不是4个用于TIMESTAMP(自纪元以来的秒数)。如果您需要从多个地理位置的客户那里获得时间,您还可以避免出现时区问题。逻辑运算(用于排序等)在整数上也是最快的。