4

私のデータセットには、2 つのタイムスタンプ列があります。1 つ目は、アプリケーションが開始されてからのマイクロ秒です - 例: 1400805323。

「64 ビット」タイムスタンプの例: 129518309081725000 129518309082059000 129518309082393000 129518309082727000 129518309083060000 12951830908339408183270905030

これを読み取り可能な形式に変換できる matlab/python コードはありますか?

どんな助けでも大歓迎です、

スティーブ

4

2 に答える 2

5

これらの値が今日 2011 年 6 月 6 日に生成されたと仮定すると、これらの値は 1601 年 1 月 1 日からの 100 ナノ秒間隔の数のように見えます。これは、Windows NT がFILETIMEを保存する方法です。詳細については、Raymond Chen のブログ記事を参照してください。これらの記事は、それを他のものに変換する方法も示しています

于 2011-06-06T19:59:13.993 に答える
5

更新された回答については、以下の編集を参照してください
。NTP 時間の場合、64 ビットは秒と秒の端数に分割されます。上位 32 ビットは秒です。下位 32 ビットは秒の端数です。分数部分を 2^32 で割ると分数が得られます。

ステップ 1 では、double に変換します。

十分に簡単な python が好きなら、私は境界チェックを追加しませんでした:

def to_seconds(h):
   return (h>>32) + ((float)(h&0xffffffff))/pow(2,32)

>>> to_seconds(129518309081725000)
30155831.26845886

time モジュールは、その float を読み取り可能な時間形式に変換できます。

import time
time.ctime(to_seconds(ntp_timestamp))

ただし、タイムスタンプの発信元について心配する必要があります。time.ctime は 1970 年 1 月 1 日を基準としています。したがって、プログラムが実行されてからの ntp 形式の時間に基づいている場合は、ctime のタイムスタンプを正規化するために秒数を追加する必要があります。

>>> time.ctime(to_seconds(129518309081725000))
'Tue Dec 15 17:37:11 1970'

編集: PyGuy は正しいです。元のタイムスタンプは ntp 時刻番号ではなく、Windows 64 ビットのタイムスタンプです。

1/1/1601 に基づく 100ns 間隔を 1970 秒間隔に変換する新しい to_seconds メソッドを次に示します。

def to_seconds(h):
    s=float(h)/1e7 # convert to seconds
    return s-11644473600 # number of seconds from 1601 to 1970

そして新しい出力:

import time
time.ctime(to_seconds(129518309081725000))
'Mon Jun  6 04:48:28 2011'
于 2012-11-01T16:28:26.210 に答える