1. ホーム
  2. python

[解決済み] ミリ秒単位のエポックタイムからdatetimeへの変換

2023-02-21 04:28:39

質問

私はisoのタイムスタンプをエポックに変換するためにrubyスクリプトを使用しています。私が解析しているファイルは、以下のタイムスタンプ構造を持っています。

2009-03-08T00:27:31.807

ミリ秒を残したいので、以下のrubyのコードでエポックタイムに変換しています。

irb(main):010:0> DateTime.parse('2009-03-08T00:27:31.807').strftime("%Q")
=> "1236472051807"

しかし、pythonでは以下のようにしてみました。

import time 
time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807))

でも、元の時間日付の時刻は戻ってきません。

>>> time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807))
'41152-03-29 02:50:07'
>>> 

私の書式設定の仕方と関係あるのかなぁ?

どのように解決するのですか?

使用方法 datetime.datetime.fromtimestamp :

>>> import datetime
>>> s = 1236472051807 / 1000.0
>>> datetime.datetime.fromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S.%f')
'2009-03-08 09:27:31.807000'

%f ディレクティブがサポートするのは datetime.datetime.strftime によってのみサポートされ time.strftime .

アップデイト 代替方法として % , str.format :

>>> import time
>>> s, ms = divmod(1236472051807, 1000)  # (1236472051, 807)
>>> '%s.%03d' % (time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms)
'2009-03-08 00:27:31.807'
>>> '{}.{:03d}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms)
'2009-03-08 00:27:31.807'