所有 我想知道是否有办法在Matlab中生成时间戳系列?
我假设会有开始时间,结束时间和频率。
使用1:1:100(1到100乘1)
生成正常序列很简单我如何使用类似的方式生成时间戳系列?
例如,我指定开始时间为上午9点,直到上午10点,我想生成类似9:00:00:000,9:00:00:500,9:00:01:000的内容,...
加了500毫秒
甚至更好,也包括日期。
答案 0 :(得分:1)
使用datenum,你可能遇到的唯一问题是,如果你跨越很长一段时间,你会在第二天/每天或夏季节省时间之间发生冲突(但我不认为这是在datestr
as you can read here)中实施的。
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
答案 1 :(得分:1)
从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'
答案 2 :(得分:0)
这取决于您的需求,但您可以考虑使用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手册。