【问题标题】:using datenum for timestamp using Matlab使用 Matlab 使用 datenum 作为时间戳
【发布时间】:2017-11-17 18:07:12
【问题描述】:

我编写这段代码来计算 datenum 值:

     Test_table = table2dataset(Test_table);

       t1 = Test_table (:,3);
       c1 =dataset2cell(t1); 
       C1 = strrep(c1(2:end), '"', '');
       formatIn = 'yyyy-mm-dd HH:MM:SS.FFF';
        T1= datenum(C1(1:end),formatIn);      

我有表格格式的数据,这些数据被转换成数据集,然后我从那里以单元格数组的形式提取时间戳。但是当我运行代码时,出现以下错误:

DATENUM 的输入不是字符向量数组。

单元格数组格式的整个时间戳(t1)上传到此站点here:但仍然出现错误,'Error using strrep 单元格元素必须是字符向量。 .这里有什么问题?

解决方案:

经过1天的挣扎,我能够解决这个问题。实际上我得到的错误是因为我有以下格式的数据集[1x1 string] 这是错误的,因此我的代码出现错误。所以为了解决这个问题,我使用了cellstr 函数,它将我的整个数据集转换为单元格。因此现在工作。所以正确的代码应该是这样的,

    t1 = table2dataset(:,3);
    C1 = cellstr(t1);
     d1 = strrep(C1, '"', '');

         formatIn = 'yyyy-mm-dd HH:MM:SS.FFF';
         t1 = datenum(d1, formatIn);

希望这对未来的访客有所帮助!

【问题讨论】:

  • 如果您提供矩阵作为输入,则不能根据documentation 指定formatIn。试试T1= datenum(c1)。输入格式应自动确定。
  • 这也行不通。我收到以下错误“DATEVEC 的输入不是字符向量数组。”
  • 我注意到时间戳中有双引号,但在 matlab 示例中应该是单引号。那么我们如何将双引号替换为单引号呢?
  • 单引号表明它一个字符串,日期字符串没有引号。如果您的字符串包含双引号,请使用 c1 = strrep(c1, '"', '') 删除它们,其中中间参数是双引号括起来的单引号,最后一个参数只是两个单引号。
  • 是的,我也在考虑同样的问题。但是我怎样才能从整个 c 值中删除双引号,因为这显示了唯一的一个值。我有 500 个值的时间戳。如何使用上述函数将整个值转换为单引号?

标签: matlab timestamp


【解决方案1】:

好的,所以你有以下元胞数组:

t1 = {'"2009-04-13 04:20:00.000"'
      '"2009-04-13 04:30:00.000"'
      '"2009-04-13 04:40:00.000"'
      '"2009-04-13 04:50:00.000"'
      '"2009-04-13 05:00:00.000"'
      '"2009-04-13 05:10:00.000"'
      '"2009-04-13 09:40:00.000"'
      '"2009-04-13 09:50:00.000"'
      '"2009-04-13 10:00:00.000"'
      '"2009-04-13 10:10:00.000"'}

每个日期都是一个字符串,因为它被引号'包围,每个日期包含双引号,因为你的数据提取。要从整个元胞数组中删除双引号,请将它们替换为空字符串 ''(这是两个单引号,中间没有空格)。使用strrep 执行此操作。

c1 = strrep(t1, '"', '');

% c1 = {'2009-04-13 04:20:00.000'
%       '2009-04-13 04:30:00.000'
%       '2009-04-13 04:40:00.000'
%       '2009-04-13 04:50:00.000'
%       '2009-04-13 05:00:00.000'
%       '2009-04-13 05:10:00.000'
%       '2009-04-13 09:40:00.000'
%       '2009-04-13 09:50:00.000'
%       '2009-04-13 10:00:00.000'
%       '2009-04-13 10:10:00.000'}

然后您可以将其传递给datevecdatenum

formatIn = 'yyyy-mm-dd HH:MM:SS.FFF';
T1 = datevec(c1, formatIn);

%    year          month       day          hour       minutes     seconds
%T1=[2009           4          13           4          20           0
%    2009           4          13           4          30           0
%    2009           4          13           4          40           0
%    2009           4          13           4          50           0
%    2009           4          13           5           0           0
%    2009           4          13           5          10           0
%    2009           4          13           9          40           0
%    2009           4          13           9          50           0
%    2009           4          13          10           0           0
%    2009           4          13          10          10           0]

【讨论】:

  • 谢谢你。但正如我所说,我输入了带有双引号的时间戳。在您的编码中,您添加了单引号和双引号。这些小样本非常简单。但我有 800 个值的单元格数组的时间戳。如何将单引号添加到整个值中?这就是我现在面临的问题
  • 我还没有给字符串加单引号,我已经把它加到make it a string了。单引号不在字符串中!如果您有元胞数组,则其中的项目必须具有格式。请将我的示例t1 创建复制到您的Matlab 中,然后在Workspace 中查看t1,您将看不到单引号。你试过剩下的方法了吗?
  • 您的示例运行良好。但是当我尝试对我的整个数据做同样的事情时。它给了我错误。我修改了代码,并详细解释了为什么会出现此错误。请再次查看问题
  • 那你是怎么解决的呢?出了什么问题?如果我的回答有帮助,请采纳。如果您认为这对其他人有帮助,请随时发布您自己的答案
  • 当然,我正在制作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 2018-12-12
  • 2011-11-21
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多