在matlab中使用datenum将单元格转换为日期?
我有一个包含单元格结构中日期的矩阵。我使用datenum()成功地转换了日期(第2列),但我不确定如何添加时间(第3列) 数据如下所示:在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
'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
的输入仅为日期字符串(第二列中的值)。。。您希望从哪里获得时间值?我已经修改了答案,将时间值添加到结果中。