2009-12-15 60 views
0

在Python中存储时间(在我的情况下,在ZODB中,但适用于任何数据库),你使用什么格式(时代,日期时间等),为什么?在Python中存储时间 - 最佳格式?

+0

什么时候用于?你需要轻松比较它们吗?您是否想要轻松查找给定时区的每个星期三?您是否存储时间跨度为一天,30天,300天,3000天或?提出更好的问题,得到更好的答案。 – Kurt 2009-12-31 07:31:17

回答

5

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

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

5

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

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

ISO 8601格式是可排序的,在数据​​库中通常需要索引。此外,它是明确的,所以你知道2009-01-12是在一月份,而不是在十二月份。那些改变月份和日期位置的人总是把年份放在最后,因此首先停止人们自动采取不正确的格式。

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

0

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