我需要在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()具有较小的范围并且不起作用,并且从秒到日期时间没有任何功能。 也许我应该节省秒数并习惯它。 感谢
答案 0 :(得分:4)
MySQL不提供第一类INTERVAL类型,该类型将是python timedelta
的SQL模拟类型。
因此,对于存储增量,我建议只需将差值以秒为单位存储在一个足以保持最大预期值的积分字段中。
显示 “这么多天,几小时,几分钟等”格式的增量 - 这就是你似乎在寻找的东西 - 我会建议在客户端代码中执行此操作timedelta
对象可以很好地进行字符串化,或者您可以随意滚动自己的格式化程序。
如果你搜索那些试图格式化间隔的人(“X秒前”或“X周前”),你会看到相关的方法和工具包。
答案 1 :(得分:1)
我建议你采取自己的建议,只需保存秒数。
根据我的经验,它几乎总是更容易存储UNIX时间戳(自* nix纪元以来的秒数)而非实际日期,因为它总是很容易使用。
http://en.wikipedia.org/wiki/Unix_time
然后在输出之前的最后一刻格式化数据。
秒是一种非常有用的存储时间的方法,习惯它! :)
答案 2 :(得分:0)
当使用数据库中的时间时,通常最好使用数据库的当前时间而不是系统的当前时间。如果您只想从数据库中获取当前的正常运行时间并显示它,我会在SQL查询中执行此操作。
SELECT NOW()-lastrestart AS uptime FROM ...
这将以秒为单位返回正常运行时间。
至于lastrestart
字段,我会使用MySQL TIMESTAMP
类型。以下是一些原因: