在Python中存储时间 - 最佳格式?
在Python中存储时间时(我这里是指在ZODB中,但其实适用于任何数据库),你会用什么格式(比如时间戳、日期时间等)呢?为什么选择这个格式?
3 个回答
0
自1970年1月1日以来的秒数是一种非常简洁和方便的时间数据存储格式。比如在MySQL中,原生的DATETIME格式需要8个字节,而TIMESTAMP(即自1970年1月1日以来的秒数)只需要4个字节。如果你需要从不同地区的用户那里获取时间,这种格式还能避免时区带来的麻烦。此外,在进行排序等逻辑操作时,使用整数的速度也是最快的。
5
如果数据库有自己专用的日期时间格式,我会尽量使用这个格式,即使这需要一些编码和解码。即使这个格式不是像SQLITE那样的100%标准,我还是会使用在SQLITE3帮助页面底部提到的日期和时间适配器。
在其他情况下,我会使用ISO 8601格式,除非是存储某种对象的二进制编码的Python对象数据库。
ISO 8601格式是可以排序的,这在数据库中通常是为了索引需要的。而且,它没有歧义,比如2009-01-12就明确表示是1月12日,而不是12月。那些把月份和日期位置调换的人,总是把年份放在最后,所以把年份放在最前面可以避免人们自动假设错误的格式。
当然,你可以根据需要在你的应用程序中重新格式化显示和输入,但数据库中的数据通常是用其他工具查看的,而不是你的应用程序。