【问题标题】:Generate timestamp series in Matlab?在 Matlab 中生成时间戳系列?
【发布时间】:2016-12-01 00:36:20
【问题描述】:

全部 我想知道有没有办法在Matlab中生成时间戳序列?

我假设会有一个开始时间、一个结束时间和一个频率。

使用 1:1:100(1 到 100 乘 1)生成正常序列很简单

如何使用类似的方式生成时间戳系列?

例如,我将开始时间指定为上午 9 点,直到上午 10 点,我想生成类似 9:00:00:000、9:00:00:500、9:00:01:000、... .

间隔 500 毫秒

或者甚至更好,包括日期。

【问题讨论】:

    标签: matlab datetime timestamp time-series matlab-figure


    【解决方案1】:

    使用datenum,您可能遇到的唯一问题是,如果您跨越很长一段时间,您可能会遇到间隔秒/天或夏季储蓄时间(但我认为datestr 中没有实现as you can read here)。

    datenumnowdatestr 一起玩

    starttime = datenum(2000, 1, 1, 9, 0, 0);
    dt = 0.500/86400; % datenum is a serial time format with 1 = 1 day = 86400 sec
    N = 5;
    timevec = starttime + dt*(0:(N-1));
    
    >> datestr(timevec, 'HH:MM:SS.FFF')
    
    ans =
    
    09:00:00.000
    09:00:00.500
    09:00:01.000
    09:00:01.500
    09:00:02.000
    

    【讨论】:

      【解决方案2】:

      这取决于你的需要,但你可以考虑使用datetime()days()hours()minutes()seconds()等函数中的一个或多个的组合。

      让我们写一些代码:

      start=datetime(1985,07,13,9,0,0);  % your start date
      steps=seconds(0:0.5:100);          % your vector with steps
      timeseries=start+steps;            % your time series
      

      您还可以设置显示满足您需要的数据的格式,请查看datetime properties 手册。

      【讨论】:

        【解决方案3】:

        从 2015a 开始,您可以使用 milliseconds 函数构建时间点之间的时间步长向量:

        start = datetime('2017/1/3 9:00:00:000','InputFormat','yyyy/MM/dd H:mm:ss:SSS');
        step = milliseconds(500);
        fin = datetime('2017/1/3 10:00:00:000','InputFormat','yyyy/MM/dd H:mm:ss:SSS');
        time_vec = start:step:fin;
        

        如果您没有明确定义日期,它将选择当前日期。

        您也可以为时间和数据使用一种结构,您可以使用timeseries 类(使用上面的start):

        data = rand(7201,1);
        ts = timeseries(data,'Name','MyTs');
        ts.TimeInfo.StartDate = start;
        ts.TimeInfo.Units = 'milliseconds';
        ts = setuniformtime(ts,'Interval',500);
        

        这将创建一个时间序列对象:

        >> ts
          timeseries
        
          Common Properties:
                    Name: 'MyTs'
                    Time: [7201x1 double]
                TimeInfo: [1x1 tsdata.timemetadata]
                    Data: [7201x1 double]
                DataInfo: [1x1 tsdata.datametadata]
        

        带有以下时间信息:

        >> ts.TimeInfo
          tsdata.timemetadata
          Package: tsdata
        
          Uniform Time:
            Length       7201
            Increment    500 milliseconds
        
          Time Range:
            Start        03-Jan-2017 09:00:00
            End          03-Jan-2017 10:00:00
        
          Common Properties:
                  Units: 'milliseconds'
                 Format: ''
              StartDate: '03-Jan-2017 09:00:00'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-14
          • 2020-12-27
          • 2015-03-14
          • 1970-01-01
          • 2010-09-11
          相关资源
          最近更新 更多