2015-08-16 4 views
1

У меня есть матрицаMatlab: Добавить миллисекунды время вектор чч: мм: сс

M = 
hh:mm:ss ms 
'12:00:01' 1 
'12:00:02' 2 
'12:00:03' 3 
'12:00:04' 4 
'12:00:05' 5 

Теперь я хочу, чтобы добавить массив миллисекунды ms на мой вектор времени. Как

N = 
    hh:mm:ss 
    '12:00:01.001' 
    '12:00:02.002' 
    '12:00:03.003' 
    '12:00:04.004' 
    '12:00:05.005' 

Как это сделать? То, что я пробовал, было:

for k=1:length(M) 
    t1 = datenum(M{k,1},'HH:MM:SS'); 
    c = num2str(M{k,2}); 
    t2 = datenum(c,'FFF'); 
    time = t1+t2; 
    N{k,1} = datestr(time,'HH:MM:SS.FFF'); 
end 

Но это не работало правильно. Что я могу сделать?

N = 
hh:mm:ss 
'12:00:01.100' 
'12:00:02.200' 
'12:00:03.300' 
... 
'12:00:04.100' 
'12:00:05.110' 
'12:00:05.120' 

Я думаю, что эту проблему решить легко. Но на данный момент я просто не знаю, как это решить.

ответ

2

Это проблема форматирования строки.

В своем коде, вместо

c = num2str(M{k,2}); 

использование

c = sprintf('%03d',M{k,2}); 

В вышеприведенном использования, sprintf колодки нули в начале строки, если он длиной менее 3-х символов.

+0

Моя строка идет от 1: 10000. Таким образом, это более 3 символов. Как я могу справиться с этим кодом? Спасибо! – Samuel

+0

Чтобы форматировать числа в 5-значную строку, вы можете использовать sprintf ('% 05d', M {k, 2}); но это не поможет здесь, потому что в секунду есть только одна тысяча миллисекунд, а «датам» будет принимать только три символа. Вы должны повернуть больше 1000 миллисекунд во вторую + миллисекунду. – user3667217

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