21

エポックタイムにナノ秒のタイムスタンプがあります。たとえば1360287003083988472、1970-01-01以降のナノ秒です。

Pythonの日時オブジェクトと変換メソッドは、最大ミリ秒の精度しかサポートしていません。

このエポック時間を人間が読める時間に変換する簡単な方法はありますか?

4

2 に答える 2

37

datetimeまず、それを2番目の精度(丸められていない、床に置かれている)のオブジェクトに変換します。

>>> from datetime import datetime
>>> dt = datetime.fromtimestamp(1360287003083988472 // 1000000000)
>>> dt
datetime.datetime(2013, 2, 7, 17, 30, 3)

次に、人間が読めるようにするstrftime()には、戻ってきたオブジェクトのメソッドを使用します。

>>> s = dt.strftime('%Y-%m-%d %H:%M:%S')
>>> s
'2013-02-07 17:30:03'

最後に、ナノ秒の精度で追加し直します。

>>> s += '.' + str(int(1360287003083988472 % 1000000000)).zfill(9)
>>> s
'2013-02-07 17:30:03.083988472'
于 2013-03-27T00:39:43.570 に答える
10

実際、Pythonのdatetimeメソッドはミリ秒ではなくマイクロ秒の精度を処理します。

>>> nanos = 1360287003083988472
>>> secs = nanos / 1e9
>>> dt = datetime.datetime.fromtimestamp(secs)
>>> dt.strftime('%Y-%m-%dT%H:%M:%S.%f')
'2013-02-07T17:30:03.083988'

しかし、実際にナノ秒が必要な場合でも、それは役に立ちません。あなたの最善の策はあなた自身のラッパーを書くことです:

def format_my_nanos(nanos):
    dt = datetime.datetime.fromtimestamp(nanos / 1e9)
    return '{}{:03.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S.%f'), nanos % 1e3)

これは私に与えます:

'2013-02-07T17:30:03.083988472'

もちろん、Pythonが1秒未満の精度をまったく実行しなかったとしても、同じことを実行できたはずです…</ p>

def format_my_nanos(nanos):
    dt = datetime.datetime.fromtimestamp(nanos / 1e9)
    return '{}.{:09.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S'), nanos % 1e9)
于 2013-03-27T00:48:51.007 に答える