在matlab中扩展时间元素矩阵

时间:2013-12-09 11:40:27

标签: matlab time

我从csv文件导入了1xn矩阵,称为时间。是否有任何方法可以通过遵循时间模式来扩展此矩阵(以便每月的工作天数)?例如,如果我开始。

time = 

    '"2013-05-01"'
    '"2013-05-02"'
    '"2013-05-03"'
    '"2013-05-04"'
    '"2013-05-05"'

以某种方式添加5个观察结果,我的矩阵变为:

time = 

    '"2013-05-01"'
    '"2013-05-02"'
    '"2013-05-03"'
    '"2013-05-04"'
    '"2013-05-05"'
    '"2013-05-06"'
    '"2013-05-07"'
    '"2013-05-08"'
    '"2013-05-09"'
    '"2013-05-10"'

2 个答案:

答案 0 :(得分:2)

  1. 如果time是字符矩阵:

    N = 5; %// how many dates to add
    lastdate = datenum(strrep(time(end,:),'"',''),29); %// last available date
    time = [time; [repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)] ];
    
  2. 如果time是一个单元格数组,只需用

    替换最后一行
    time = [time; mat2cell([repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)],ones(1,N)) ];
    
  3. 这可以通过阅读最后一个字符串日期,使用datenum转换为数字日期,生成N个新连续日期,然后使用datestr转换回字符串。双引号分开处理。

    示例:

    >>time = ['"2013-05-04"'; '"2013-05-05"']
    
    time =
    
    "2013-05-04"
    "2013-05-05"
    

    给出

    >> N = 5; %// how many dates to add
    lastdate = datenum(strrep(time(end,:),'"',''),29); %// last available date
    time = [time; [repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)] ]
    
    time =
    
    "2013-05-04"
    "2013-05-05"
    "2013-05-06"
    "2013-05-07"
    "2013-05-08"
    "2013-05-09"
    "2013-05-10"
    

答案 1 :(得分:2)

我假设time是一个单元格数组:

t = cell2mat(time);
n = 5;
t = datenum(t,'"yyyy-mm-dd"'); % using custom format
tdiff = t(end)-t(end-1); % assuming 
l = length(t);

newtime = zeros(l+n,1);
newtime(1:l)=t;
newtime(l+1:end) = (t(end)+tdiff):tdiff:(t(end)+tdiff*n);

您可以使用datestr转换回您选择的日期格式。