2012-04-11 2 views
1

У меня есть текстовый файл, содержащий временные метки из камеры, которая захватывает 50 кадров в секунду .. Данные таковы:Matlab: Преобразование временных меток в читаемый формат данного справочного Date-Time

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

. .. и так далее.

Это дает также время начала захвата, как

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

метки времени, в микросекунд не в миллисекундах, и MATLAB может поддерживать только до миллисекунд, но его хорошо для меня.

Теперь мне нужно знать, человеческий формат этих меток времени для каждого row..like

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 секунд. Поскольку у меня есть 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** 

Может помочь мне, пожалуйста ..! Где моя ошибка?

ответ

0

Похоже, что вы можете работать количество микросекунд между записью и первой записью:

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

конвертировать, что в секунды:

secsDiff = usecs/1e6; 

затем добавить, что к начальному DateTime вас Вычислено:

matDateTime = refNum + secsDiff/(24*60*60); 
+0

, но он не сможет узнать разницу во времени между контрольным временем a первая запись. – memyself

+0

@Alex: Большое вам спасибо! Он решен. Но не могли бы вы просто сказать мне, где моя ошибка? Я не могу понять, где смысл решения таких проблем. – SamMom

+0

@memyself: Чтобы преодолеть это, я просто добавляю datetime refernce как первую запись в массив. Спасибо всем! – SamMom

Смежные вопросы