2014-02-27 141 views
0

我正在玩转时间字符串和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'

为什么?

回答

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'); 
+0

我是多么愚蠢,这个答案有多棒!丹科!谢谢! –

+1

需要大写的唯一部分是用'MM'来消除几个月的分钟数。 'hh:MM:ss'对于MATLAB的'datenum'来说很好。 – chappjc

+0

@chappjc哦,不知道。谢谢! – Praetorian

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 
+0

@FarticlePilter我更新了我的anwser获得秒。 – Marcin

+0

非常感谢!我感谢您的帮助! :) –

1

首先,

'HH:MM:SS' 

是你所需datestring(毫米是个月)。其次,datenum不返回秒,它返回从零年开始的日期。

相关问题