用Matlab实现时间戳的datenum

用Matlab实现时间戳的datenum,matlab,timestamp,Matlab,Timestamp,我编写以下代码用于计算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值:

     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
)都上载到此站点:但仍然收到一个错误,“使用strrep时出错” 单元格元素必须是字符向量。“。这里怎么了

解决方案:

经过一天的努力,我终于解决了这个问题。实际上,我得到的错误是因为我有以下格式的数据集
[1x1 string]
,这是错误的,因此我的代码出现了错误。所以为了解决这个问题,我使用了
cellstr
函数将我的整个数据集转换成cell。因此现在开始工作。所以正确的代码应该是这样的

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

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

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

好的,您有以下单元格数组:

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"'}
每个日期都是一个字符串,因为它被单引号
包围,并且由于数据提取,每个日期都包含双引号。要从整个单元格数组中删除双引号,请将其替换为空字符串
'
(这是两个单引号,中间没有空格)。使用

然后您可以将其传递给
datevec
datenum

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]

如果要提供矩阵作为输入,则不能根据指定指定
格式。请尝试
T1=datenum(c1)
。输入格式应自动确定。这也不起作用。我得到以下错误“DATEVEC的输入不是一个字符向量数组”,我注意到时间戳中有双引号,但在matlab示例中应该是单引号。那么我们如何将双引号替换为单引号呢?单引号表示它是一个字符串,在日期范围内没有引号。如果字符串包含双引号,请使用
c1=strep(c1,“,”)删除它们
中间的参数是围绕双引号的单引号,最后一个参数只是两个单引号。是的,我也在考虑同样的问题。但是我如何从整个c值中删除双引号,因为它只显示一个值。我有时间戳,比如说500个值。我如何将整个值转换为单引号使用上述函数进行报价?谢谢。但正如我所说,我输入了带有双引号的时间戳。在您的编码中,您添加了单引号和双引号。对于这些小样本来说,这非常简单。但是我有800个值的单元格数组的时间戳。如何将单引号添加到整个值中?这是t我现在面临的问题我没有将单引号添加到字符串中,我添加它是为了使其成为字符串。单引号不在字符串中!如果您有单元格数组,其中的项必须具有格式。请将我的示例
t1
创建复制到您的Matlab中,然后在工作区中查看
t1
,您将看不到任何引用。你尝试过该方法的其余部分吗?你的示例运行得很好。但当我尝试对我的全部数据执行相同操作时,这会给我带来错误。我修改了代码,并对我为什么会出现此错误给出了更多解释。请再次研究这个问题,你是如何解决的?问题是什么?如果我的答案正确的话ped,那么请接受它。如果你认为它对其他人有帮助,请随时发布你自己的答案。我正在制作
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]