8

我需要在 mysql 环境中存储正常运行时间。正常运行时间可以从几个小时到一年以上不等。我正在考虑为 mysql 使用 DATETIME 类型。我正在使用 python,正常运行时间来自

def convertdate(lastrestart):
   # now in datetime
   nowdt=datetime.now()

   # last_restarted in datetime
   lastrestarted_dt=datetime.strptime(lastrestart, "%Y-%m-%d %H:%M:%S")

   # timedelta in datetime! 
   uptimeInDT=nowdt-lastrestarted_dt

   #timedelta in seconds
   secondsUptime=uptimeInDT.seconds

   # string conversion wont work so much for a datetime field.
   print str(uptimeInDT)

这是完成这项工作的最佳方式吗?我可以使用其他解决方案吗?mysql 中的 SEC_TO_TIME() 范围较小,无法工作,从 sec 到 datetime 没有函数。也许我应该节省时间并习惯它。谢谢

4

3 回答 3

6

MySQL 不提供一流的 INTERVAL 类型,该类型将是 Python 的timedelta.

因此,为了存储增量,我建议简单地将差异以秒为单位存储在一个足够大的整数字段中以容纳您的最大期望值。

“这么多天、几小时、几分钟等”显示增量。格式——这似乎是你正在寻找的——我建议在客户端代码中这样做。 对象可以很好地字符串化,或者您可以根据需要滚动自己的格式化程序。timedelta

如果您在 SO 中搜索尝试格式化间隔的人(“X 秒前”或“X 周前”),您将看到相关的方法和工具包。

于 2012-11-02T21:00:06.010 回答
1

我建议您采用自己的建议,只需节省几秒钟。

根据我的经验,存储 UNIX 时间戳(自 *nix 纪元以来的秒数)几乎总是比实际日期更容易,因为它总是很容易使用。

http://en.wikipedia.org/wiki/Unix_time

然后在输出前的最后一刻格式化数据。

秒是一种非常有用的存储时间的方式,习惯吧!:)

于 2012-11-02T21:04:48.717 回答
0

使用数据库中的时间时,通常最好使用数据库的当前时间而不是系统的当前时间。如果您只想从数据库中获取当前的正常运行时间并显示它,我会在 SQL 查询中这样做。

SELECT NOW()-lastrestart AS uptime FROM ...

这将以秒为单位返回正常运行时间。

至于lastrestart字段,我会使用 MySQLTIMESTAMP类型。以下是一些原因:

于 2012-11-02T20:13:33.743 回答