【问题标题】:From UTC to date vector从 UTC 到日期向量
【发布时间】:2011-10-24 14:24:41
【问题描述】:

我有一组以2010-07-31T23:01:57Z 形式表示的日期。我需要将其转换为矢量。我可以这样做 datavec(mydate) 它会自动将字符串转换为向量,但此函数不接受 UTC 字符串日期。于是我就这样粗暴地解决了:

a = `2010-07-31T23:01:57Z`; %UTC date format
a(20) = '';                 %remove Z
a(11) = ' ';                %replace T with a space 
a = datavec(a);             % [2010, 7, 31, 23, 1, 57]

这样a 是一个日期向量,我可以使用etime(T1, T0) 来计算T1T0 之间的时间差。这是独特的方式还是我可以做一些时尚的事情?

【问题讨论】:

    标签: matlab datetime date utc


    【解决方案1】:

    正如 Marc 所建议的,您所要做的就是通过指定数据格式来“帮助”MATLAB。

    datevec('2010-07-31T23:01:57Z','yyyy-mm-ddTHH:MM:SS')
    

    应该可以解决问题。

    【讨论】:

      【解决方案2】:

      使用datevec() 调用的fieldSpecIn 部分。在这里阅读所有相关信息: http://www.mathworks.com/help/techdoc/matlab_prog/bspgcx2-1.html#bspgc4m-1

      除了字符串末尾的 TZ 规范以及 - 和 : 之外,您的与标准 ISO 8601 格式相同。您可以修改自己的,也可以创建自己的规范字符串。

      请注意,Matlab 时间没有时区的概念。您必须自己跟踪。

      【讨论】:

      【解决方案3】:

      正如其他人所说,您可以将预期日期字符串的格式指定为DATEVECDATENUM 等函数。示例:

      %# set of dates and an initial date
      T0 = '2010-01-01T00:00:00Z';
      T = repmat({'2010-07-31T23:01:57Z'}, [10 1]);   %# cell array
      
      %# format of datetime
      frmt = 'yyyy-mm-ddTHH:MM:SS';
      
      %# convert to serial date numbers, and compute difference between all T and T0
      n = datenum(T,frmt);
      n0 = datenum(T0,frmt);
      tdiff = bsxfun(@minus, n, n0);
      

      或者,如果您有不寻常的日期格式,您可以随时使用 TEXTSCAN 等函数自行拆分和解析:

      vec = zeros(numel(T),6);
      for i=1:numel(T)
          C = textscan(T{i}, '%f', 'Delimiter',['-' ':' 'T' 'Z']);
          vec(i,:) = C{1};
      end
      n = datenum(vec);
      

      请注意,在这两种情况下,您都可以使用 DATESTR 函数将序列时间转换回日期字符串。

      【讨论】:

        猜你喜欢
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-25
        • 1970-01-01
        相关资源
        最近更新 更多