2013-05-08 57 views
0

我想計算的時間(以毫秒爲單位)的數據是這樣的:經過時間以毫秒爲單位不同日期

START: 2013-05-04 23:13:06.188
ENDED: 2013-05-05 1:22:41.617

,因爲我需要以毫秒爲單位經過的時間我不能使用etime()。當我使用一個for循環是這樣的:

[start_i, end_i] = regexp(data{i}, '\d+-\d+-\d+ \d+:\d+:\d+.\d+'); 
temp_str = data{i}; 
time{i} = cellstr(temp_str(start_i:end_i)); 

n1 = datenum(datevec(time{i-1}, 'yyyy-mm-dd HH:MM:SS.FFF')); 
n2 = datenum(datevec(time{i}, 'yyyy-mm-dd HH:MM:SS.FFF')); 

n = n2 - n1 

它提供了以下錯誤:

Error using dtstr2dtvecmx
Failed on converting date string to date number.

Error in datevec (line 118)
y = dtstr2dtvecmx(t,icu_dtformat);

Error in test (line 40)
n1 = datenum(datevec(time{i-1}, 'yyyy-mm-dd HH:MM:SS.FFF'));

如果我用datevec()這樣的:

[start_i, end_i] = regexp(data{i}, '\d+:\d+:\d+.\d+'); 
temp_str = data{i}; 
time{i} = cellstr(temp_str(start_i:end_i)); 

t1 = datevec(time{i-1}, 'HH:MM:SS.FFF'); 
t2 = datevec(time{i}, 'HH:MM:SS.FFF'); 

t = t2 - t1 
datevec(t) 

它減少時間段,逐元素(秒與秒,分與分鐘等),並有時給負數。

我認爲應該有一個完整的方式來做到這一點,而不需要手動修復負值。有誰知道如何做到這一點?

回答

1

如何如下:

%# your data 
data = { 
    'START: 2013-05-04 23:13:06.188' 
    'ENDED: 2013-05-05 1:22:41.617' 
}; 

%# extract date/time strings 
s = regexprep(data, '^\w+: ', ''); 

%# convert to serial date number (in units of days) 
t1 = datenum(s{1}, 'yyyy-mm-dd HH:MM:SS.FFF'); 
t2 = datenum(s{2}, 'yyyy-mm-dd HH:MM:SS.FFF'); 

%# difference in seconds 
diff_sec = (t2-t1) * 24 * 3600 
+0

其實'datenum'確實接受字符串單元陣列,所以你你寫一個量化的呼叫:'T = datenum(S,「YYYY-MM-DD HH :MM:SS.FFF')' – Amro 2013-05-08 08:25:49

相關問題