2016-10-11 4 views
1

多くの楽器からタイムスタンプを生成するために使用するコードは次のとおりです。データが読み込まれると(ミリ秒単位で)、最初のSQLiteデータベースにログインし、送信時に2番目のデータベースにログインします(ミリ秒単位)。データ収集の数日後、私は60秒(vs 00または59)で終わるログ記録された時間に終わる夜に2回あることがわかります。Python 2.7のdatetimeオブジェクトが60秒の値を返します

私はPythonがうるう秒をサポートしていることを理解していますが、私がデータを記録していた夜は何もなかったことを知っています。また、datetimeは59より大きい秒をサポートしていません。とにかく、私は何が起こっているのか分からず、手で問題を再現できませんでした。私は他の誰かがこの行動を以前に見たことがあると思っていました。

例として、私の最初のログには20160823043460のエントリがあり、送信ログには20160823043500.01があります。

ここに私のタイムスタンプコードです。時ライブラリ、hereため

def makeTimeStamp(time=None, miliseconds=False): 
    timeStamp = "" 
    if time is None and miliseconds is False: 
     timeStamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S") 
    #time format: YYYY MM DD HH MM SS as one string 
    elif time is None and miliseconds is True: 
     timeStamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S.%f") 
    else: 
     try: 
      timeStamp = time.strftime("%Y%m%d%H%M%S") 
     except AttributeError: 
      print "error: attempted to make a timestamp from a " + type(time) 
    return timeStamp 
+0

ありがとう、それは読みやすいです。 –

+0

time = Noneで関数を呼び出し、返された文字列を数値ではなく文字列として保存していますか?あなたはそれをsqliteに格納すると言います。列のデータ型は何ですか?また、 'time'引数の名前を変更することも考えてください。標準ライブラリにその名前のモジュールがあり、そのモジュールには 'strftime()'関数もあります。 – Anton

+0

ああ、そうです。だからこそ私の名前は貧しい人々の選択です。なぜ私はそれを選んだのかわかりませんが、どこか別の場所に作成されたdatetimeで渡す場所です。この場合、私はまったくそれを使用していない、時間は常になしです。 –

答えて

-1

チェックPythonのドキュメントを(はい、私はちょうどそれをコーディングしています、私はそれはすべてが同じタイムスタンプを取得していないことを奇妙だけど、私は仕様を設計していませんでした)。

メモの中で、2の下に、秒の範囲は実際には[0、61]と表示されます。

+0

downvoteを説明できますか? – Fejs

+0

。しかし、ドキュメントでは、60と61はうるう秒のためのものであり、私がログしている間は発生しませんでした。私はこれが丸め誤差だと思っていますが、ベースのPythonライブラリで見ると驚いています。 –

+0

OPは彼が時間パッケージを釈明していないと言いますが、datetimeはドキュメントに従ってうるう秒をしません。 – Anton

関連する問題