我正在玩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'
。
为什么?
答案 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不会返回秒数,它会返回从零年过去的天数。