Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中使用datenum将单元格转换为日期?_Matlab_Date_Type Conversion - Fatal编程技术网

在matlab中使用datenum将单元格转换为日期?

在matlab中使用datenum将单元格转换为日期?,matlab,date,type-conversion,Matlab,Date,Type Conversion,我有一个包含单元格结构中日期的矩阵。我使用datenum()成功地转换了日期(第2列),但我不确定如何添加时间(第3列) 数据如下所示: 'IBM' 20090602 0 108.410000000000 'IBM' 20090602 500 108.560000000000 datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd') + vertcat(IBM{:, 3}) 我的代码: date = datenum(num2st

我有一个包含单元格结构中日期的矩阵。我使用datenum()成功地转换了日期(第2列),但我不确定如何添加时间(第3列)

数据如下所示:

  'IBM' 20090602    0   108.410000000000
  'IBM' 20090602    500 108.560000000000
datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd') + vertcat(IBM{:, 3})
我的代码:

date = datenum(num2str(IBM(:,2)),'yyyymmdd')

让我们先回顾一下你的错误:

  • 您使用字符串
    'IBM(:,2)
    而不是实际数组来馈送
    datenum
    。放弃引用
  • datenum
    接受字符串,而不是数值
  • 一种可能的解决方案是将数据的第二列转换为字符串数组,并将其输入到
    datenum
    ,如下所示:

    d = datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd');
    
    请注意,如果每行中的日期字符串的格式是固定的,则这当然是可能的

    编辑:
    要将第三列中的值添加到
    datenum
    的结果中,只需执行以下操作:

    d + vertcat(IBM{:, 3})
    
    其中,
    d
    是从
    datenum
    获得的日期值的列向量(我假设您想要进行基本加法,因为您没有在第三列中指定timje值的实际含义)

    在一行中,完整的答案如下所示:

      'IBM' 20090602    0   108.410000000000
      'IBM' 20090602    500 108.560000000000
    
    datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd') + vertcat(IBM{:, 3})
    

    转换为datenum时,可以直接在中添加时间值。只需将我假设的分钟数(如果是秒,则在除数中再加上*60)转换为天,这就是MATLAB用于datenum计算的时间

    timestamps = cellfun(@(x,y) datenum(num2str(x),'yyyymmdd')+y/(24*60),...
    IBM(:,2),...
    IBM(:,3),...
    'UniformOutput',false)
    

    您是否尝试过
    date=datenum(IBM(:,2),'yyyyymmdd')
    ?是的,我设法使用num2str修复了它,但现在我有另一个问题。谢谢您的回复。我设法对日期列使用num2str,但对时间列似乎不起作用。有什么方法可以把时间加到datenum上吗?你遵循我的解决方案了吗?它不仅仅是使用
    num2str
    。什么对您不起作用?因此,我尝试以下方法将日期添加为datenum()输入的一部分:number=cell2mat(IBM(:,2))*100000+cell2mat(IBM(:,3));date=datenum(num2str(vertcat(number)),'yyyyymmddhhmmss');我得到了“将日期字符串转换为日期编号失败”这一错误,显然是因为您使用了格式字符串
    yyyymmddHHMMSS
    而不是
    yyyymmdd
    ,这基本上告诉
    datenum
    在日期字符串中查找时间。但是,
    datenum
    的输入仅为日期字符串(第二列中的值)。。。您希望从哪里获得时间值?我已经修改了答案,将时间值添加到结果中。