1

毎秒 50 フレームをキャプチャするカメラからのタイムスタンプを含むテキスト ファイルがあります。データは次のとおりです。

1 20931160389   
2 20931180407
3 20931200603   
4 20931220273   
5 20931240360
.
.
50 20932139319

... 等々。

のようなキャプチャの開始時間も提供します

Date: **02.03.2012 17:57:01**

タイムスタンプはミリ秒単位ではなくマイクロ秒単位であり、MATLAB はミリ秒までしかサポートできませんが、私にとっては問題ありません。

ここで、各行のこれらのタイムスタンプの人間の形式を知る必要があります..のように

1   20931160389     02.03.2012 17:57:01.045  % just an example
2   20931180407     02.03.2012 17:57:01.066
3   20931200603     02.03.2012 17:57:01.083
4   20931220273     02.03.2012 17:57:01.105
5   20931240360     02.03.2012 17:57:01.124

等々

私はこれを試しました:

%Refernce Data
clc; format longg
refTime = [2012,03,02,17,57,01];
refNum = datenum(refTime);
refStr = datestr(refNum,'yyyy-mm-dd HH:MM:SS.FFF');

% Processing data
dn = 24*60*60*1000*1000; % Microseconds! I have changed this equation to many options but nothing was helpful
for i = 1 : size(Data,1)
  gzTm = double(Data{i,2}); %timestamps are uint64
  gzTm2 = gzTm / dn;
  gzTm2 = refNum + gzTm2;
  gzNum = datenum(gzTm2);
  gzStr = datestr(gzNum,'yyyy-mm-dd HH:MM:SS.FFF'); % I can't use 'SS.FFFFFF'
  fprintf('i = %d\t Timestamp = %f\t TimeStr = %s\n', i, gzTm, gzStr); 
end;

しかし、私は常に次のような奇妙な出力を得ました

i = 1    Timestamp = 20931160389.000000  TimeStr = **2012-03-08 13:29:28.849**
i = 2    Timestamp = 20931180407.000000  TimeStr = **2012-03-08 13:29:29.330**
i = 3    Timestamp = 20931200603.000000  TimeStr = **2012-03-08 13:29:29.815**

出力時間は、参照時間よりも約数時間遅い/早いです。日が違います。

配列内の各エントリ間の時間間隔は、ほぼ 20 秒である必要があります。1 秒あたり 50 フレーム (1000 ミリ秒 / 50 = 20) であるため、年、月、日、時、分、および秒も示す必要があります。最初の時間は数秒ほど早いので参考時間とします。

私は次のようなものを期待しています:

% just an example
1 20931160389 02.03.2012 **17:57:01.045** 
2 20931180407 02.03.2012 **17:57:01.066**

助けてください..!私の間違いはどこですか?

4

1 に答える 1

0

レコードと最初のレコードの間のマイクロ秒数を計算できるようです。

usecs = double(Data{i,2}) - double(Data{1,2});

それを秒に変換します。

secsDiff = usecs / 1e6;

次に、それを計算した最初の日時に追加します。

matDateTime = refNum + secsDiff / (24*60*60);
于 2012-04-11T10:45:49.083 に答える