web-dev-qa-db-ja.com

python datetimeをミリ秒単位のタイムスタンプに変換します

20.12.2016 09:38:42,76形式の人間が読める時間をミリ秒のUnixタイムスタンプに変換する方法同様の質問をたくさん見つけましたが、この特定の質問/回答は見つかりませんでした。

28
Tom

Python 3では、これは2つのステップで実行できます。

  1. Timestringをdatetimeオブジェクトに変換します
  2. datetimeオブジェクトのタイムスタンプに1000を掛けて、ミリ秒に変換します。

たとえば、次のようなものです。

from datetime import datetime

dt_obj = datetime.strptime('20.12.2016 09:38:42,76',
                           '%d.%m.%Y %H:%M:%S,%f')
millisec = dt_obj.timestamp() * 1000

print(millisec)

出力:

1482223122760.0

strptimeは、入力としてタイム文字列とフォーマット文字列を受け入れます。 timestring(最初の引数)は、実際にdatetimeオブジェクトに変換するwhatを指定します。フォーマット文字列(2番目の引数)は、渡した文字列の実際のformatを指定します。

公式ドキュメント のフォーマット指定子の説明は次のとおりです。

  • %d-ゼロが埋め込まれた10進数としての日付。
  • %m-ゼロが埋め込まれた10進数としての月。
  • %Y-10進数として世紀を含む年
  • %H-ゼロが埋め込まれた10進数としての時間(24時間制)。
  • %M-ゼロが埋め込まれた10進数としての分。
  • %S-ゼロが埋め込まれた10進数としての秒。
  • %f-左側にゼロが埋め込まれた10進数としてのマイクロ秒。
37
Milo

Python2.7の場合-ミリ秒を削除しないようにMYGzの回答を変更します。

from datetime import datetime

d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s.%f')
d_in_ms = int(float(d)*1000)
print(d_in_ms)

print(datetime.fromtimestamp(float(d)))

出力:

1482248322760
2016-12-20 09:38:42.760000
9
Matthew Cox

strptime を使用して時間形式を解析する必要があります。

>>> import time
>>> from datetime import datetime
>>> ts, ms = '20.12.2016 09:38:42,76'.split(',')
>>> ts
'20.12.2016 09:38:42'
>>> ms
'76'
>>> dt = datetime.strptime(ts, '%d.%m.%Y %H:%M:%S')
>>> time.mktime(dt.timetuple())*1000 + int(ms)*10
1482223122760.0
7
Maurice Meyer

Python2.7の場合

秒にフォーマットし、1000を掛けてミリ秒に変換できます。

from datetime import datetime

d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s')
d_in_ms = int(d)*1000
print(d_in_ms)

print(datetime.fromtimestamp(float(d)))

出力:

1482206922000
2016-12-20 09:38:42
4
MYGz

dt_objが日付時刻である場合、ミリ秒を解析および失うことなく回答を検索する場合:

python3のみ、エレガント

int(dt_obj.timestamp() * 1000)

python2とpython3の両方の互換性:

import time

int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)
0
Ivan Klass