在Python中存储时间 - 最佳格式?

0 投票
3 回答
2859 浏览
提问于 2025-04-15 17:03

在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月。那些把月份和日期位置调换的人,总是把年份放在最后,所以把年份放在最前面可以避免人们自动假设错误的格式。

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

5

datetime模块是现代Python处理日期和时间的标准工具。我喜欢用它,因为我觉得标准化很重要,而且这个模块设计得也不错。通常我还会通过pytz来获取时区信息。

当然,大多数数据库都有自己存储日期和时间的标准方式,但现代的Python数据库适配器通常支持datetime(这也是我选择使用它的一个好理由)。比如,我在使用Google App Engine的存储、Python自带的SQLite等时,都会用到这个模块。

撰写回答