2016-11-25 59 views
0

我目前正在處理一個處理MATLAB時差的小項目。我有兩個輸入文件; Time_in and Time_out。這兩個文件包含格式例如2315 (GMT - Hours and Minute)GMT在MATLAB上減法

我已經閱讀了MATLAB上的Time_in' and 'Time_out,但我不知道如何執行減法。另外,我想相應的答案,也能在短時間內域只有如(2和小時30分鐘=150分鐘)

+0

請給我們一個完整的例子嗎?你是怎麼讀這兩個時間向量的?他們在MATLAB中的變量類型是什麼? – bushmills

+0

將時間矢量讀取爲字符串。 「雙倍」會更好嗎? – Akby

+0

看到我的答案:'datenum'是處理日期或時間向量/字符串的最佳方式 – bushmills

回答

3

這是幾個可能的解決方案之一:

首先,你應該將時間字符串轉換爲MATLAB序列日期數。如果你這樣做,你可以做你的計算,只要你想:

% input time as string 
time_in = '2115'; 
time_out = '2345'; 

% read the input time as datenum 
dTime_in = datenum(time_in,'HHMM'); 
dTime_out = datenum(time_out,'HHMM'); 

% subtract to get the time difference 
timeDiff = abs(dTime_out - dTime_in); 

% Get the minutes of the time difference 
timeout = timeDiff * 24 * 60; 

此外,計算的時間差正確,你也應該把關於你的時間向量日期的一些信息,以計算正確的時間在午夜左右。

如果您需要了解的功能datenum你應該閱讀文檔MATLAB的以下部分的詳細信息:

https://de.mathworks.com/help/matlab/ref/datenum.html

有問題嗎?

+0

如何使time_in和time_out是輸入文件,我可以存儲數組數組。我試過,但'datenum'給出錯誤數組字符串 此外,我想超時答案是一個數組數組也是最終的解決方案。 謝謝 – Akby

+0

你可以讓你的字符串的例子嗎? – bushmills

+0

這是我添加到以前的代碼 fid = fopen('time_in.txt','r'); FID2 =的fopen( 'time_out.txt', 'R'); T_IN =的fscanf(FID); fclose(fid); t_out = fscan(fid2) fclose(fid2); – Akby

0

在MATLAB的最新版本中,您可以使用textscan以及datetimeduration數據類型來執行此操作。

% read the first file 
fh1 = fopen('Time_in'); 
d1 = textscan(fh1, '%{HHmm}D'); 
fclose(fh1); 
fh2 = fopen('Time_out'); 
d2 = textscan(fh2, '%{HHmm}D'); 
fclose(fh2); 

注格式指示符'%{HHmm}D'告訴MATLAB閱讀4位字符串轉換成datetime陣列。

d1d2現在是cell陣列,其中唯一元素是datetime向量。您可以減去這些,然後使用minutes功能找到的分鐘數。

result = minutes(d2{1} - d1{1})