时间字符串和第二个值之间的转换

时间:2014-02-27 23:51:10

标签: matlab

我正在玩MATLAB中时间字符串和第二个值之间的转换。但是,我注意到这种不一致。

startTime = '00:19:00';
N = 15; % minutes
% convert it to the value in sec
startSec = datenum(startTime, 'hh:mm:ss');
% N minutes passed
endSec = startSec+60*N;
% convert it back to the string format
endTime = datestr(endSec, 'hh:mm:ss');

我希望我的endTime'00:34:00',但结果是'00:12:00'

为什么?

3 个答案:

答案 0 :(得分:2)

detenum不会返回秒数。相反,它返回:

  

固定预设日期的整数天数和小数天数   (0000年1月0日)。

    startTime = '00:19:00';
    N = 15; % minutes
    % convert it to the value in sec
    startSec = datenum(startTime, 'HH:MM:SS');

    startSec = startSec * 24*60*60; % get seconds

    % N minutes passed

    endSec = startSec+60*N;
    % convert it back to the string format
    endTime = datestr(endSec / (24*60*60), 'HH:MM:SS');

    % will result in 
    %endTime = 00:34:00

答案 1 :(得分:2)

我很惊讶你的代码可以工作,因为传递给datenum的格式字符串无效;他们需要大写。

第二个问题是你假设datenum将第一个参数转换为秒并返回该值。从上面链接的文档:

  

DateNumber = datenum(DateString)将日期字符串转换为序列日期编号。 ...

     

序列日期编号表示整数和小数   固定的预设日期(0000年1月0日)的天数。

因此,在将时间偏移值添加到第一个结果之前,您还需要将时间偏移值转换为DateNumber。这是您的代码的固定版本

startTime = '00:19:00';
N = 15; % minutes

% convert it to the value in sec
startSec = datenum(startTime, 'HH:MM:SS');

% N minutes passed
endSec = startSec + datenum(sprintf('00:%02d:00', N), 'HH:MM:SS');

% convert it back to the string format
endTime = datestr(endSec, 'HH:MM:SS');

答案 2 :(得分:1)

首先,

'HH:MM:SS'

是您想要的日期字符串(mm是几个月)。其次,datenum不会返回秒数,它会返回从零年过去的天数。