【问题标题】:Convert cell to date in matlab using datenum?使用datenum在matlab中将单元格转换为日期?
【发布时间】:2013-02-26 15:26:33
【问题描述】:

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

数据如下:

  'IBM' 20090602    0   108.410000000000
  'IBM' 20090602    500 108.560000000000

我的代码:

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

【问题讨论】:

  • 你试过date = datenum(IBM(:,2), 'yyyymmdd')吗?
  • 是的,我设法使用 num2str 修复了它,但我现在有另一个问题

标签: matlab date type-conversion


【解决方案1】:

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

  1. 您使用字符串'IBM(:, 2)' 而不是实际数组来提供datenum。丢弃引号。
  2. datenum 接受字符串,而不是数值。

一种可能的解决方案是将数据的第二列转换为字符串数组,并将其输入datenum,如下所示:

d = datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd');

请注意,如果日期字符串的格式在每一行中都是固定的,这当然只有是可能的。

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

d + vertcat(IBM{:, 3})

其中d 是从datenum 获得的日期值的列向量(我假设您想做基本的加法,因为您没有在第三列中指定 timje 值的实际含义)。

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

datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd') + vertcat(IBM{:, 3})

【讨论】:

  • 感谢您的回复。我设法将 num2str 用于日期列,但它似乎不适用于时间列。有什么方法可以将时间添加到 datenum 中吗?
  • 您是否按照我的解决方案进行操作?它不仅仅是使用num2str。什么不适合你?
  • 所以我尝试了以下方法将日期添加为 datenum() 的输入的一部分: number = cell2mat(IBM(:,2))*100000+cell2mat(IBM(:,3)) ; date = datenum(num2str(vertcat(number)), 'yyyymmddHHMMSS');我得到“将日期字符串转换为日期数字失败”
  • 很明显你得到了这个错误,因为你使用了格式字符串yyyymmddHHMMSS而不是yyyymmdd,这基本上告诉datenum也在日期字符串中查找时间。但是,datenum 的输入只是日期字符串(第二列中的值)...您希望 datenum 从哪里获取时间值?
  • 我已经修改了答案,将时间值添加到结果中。
【解决方案2】:

您可以在转换为 datenum 时直接添加时间值。只需将我假设的分钟数(如果它们以秒为单位,将另一个 *60 添加到除数)转换为天数,这是 MATLAB 用于其 datenum 计算的时间。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多