all我想知道是否有一种方法可以在Matlab中生成时间戳序列?
我假设会有一个开始时间,一个结束时间和一个频率。
使用1:1:100(1到100乘1)生成正态序列很简单
如何使用类似的方法生成时间戳序列?
例如,我将开始时间指定为上午9点,一直到上午10点,我希望生成类似9:00:00:000、9:00:00:500、9:00:01:000等的内容。。。。
间隔500毫秒
或者更好的是,还包括日期。
使用datenum,您可能遇到的唯一问题是,如果您跨越了很长一段时间,您可能会与间隔秒/天或夏季储蓄时间发生冲突(但我认为datestr
中没有实现这一点,正如您在这里读到的那样)。
玩datenum、now和datestr
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
从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'
这取决于您的需求,但您可以考虑使用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属性手册。