8

mysql環境に稼働時間を保存する必要があります。稼働時間は、数時間から1年以上までさまざまです。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()は範囲が狭く、機能しません。また、秒から日時までの関数はありません。たぶん私は秒を節約してそれに慣れる必要があります。ありがとう

4

3 に答える 3

6

MySQLは、ファーストクラスのINTERVAL型を提供していません。この型は、PythonのSQLアナログになりますtimedelta

したがって、デルタを保存するには、最大の期待値を保持するのに十分な大きさの積分フィールドに秒単位で差を保存することをお勧めします。

「これだけの日、時間、分など」でデルタを表示します。フォーマット—これはあなたが探しているように見えるものです—クライアントコードでそれを行うことをお勧めします。 オブジェクトはうまくストリング化されます。または、必要に応じて独自のフォーマッターをロールすることもできます。timedelta

間隔(「X秒前」または「X週間前」)をフォーマットしようとしている人をSOで検索すると、関連するアプローチとツールキットが表示されます。

于 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 に答える