我想用以下格式在matlab中表示时间序列对象的时间。 dd-mmm-yyyy HH:MM:SS.FFF。我已将日期转换为所需的日期字符串格式,但是当我创建时间序列对象时,第二个的分数值四舍五入到最接近的整数,因此我获得了冗余时间值。
我该怎么做才能得到精确到毫秒的时间序列?
我正在使用:
dateStr = datestr(dateNum, 'dd-ddd-yyyy HH:MM:SS.FFF')
将其转换为日期字符串。
01-Mar-2008 18:28:51.810
但是,当我在时间序列中使用它时,第二部分的小数部分将四舍五入,如下所示。
tsobject = timeseries( x, dateStr, 'name', 'X-ord')
01-Mar-2008 18:28:52
实际日期字符串是
01-Mar-2008 18:28:51.810
01-Mar-2008 18:29:05.646
01-Mar-2008 18:29:07.376
01-Mar-2008 18:29:09.105
01-Mar-2008 18:29:10.835
使用datenum而不是datestr
tsobject = timeseries( x, dateNum, 'name', 'X-ord')
tsobject.TimeInfo
tsdata.timemetadata
Package: tsdata
Non-Uniform Time:
Length 90419
Time Range:
Start 7.334688e+05 seconds
End 7.336596e+05 seconds
Common Properties:
Units: 'seconds'
Format: ''
StartDate: ''
答案 0 :(得分:2)
这应该可以胜任(特别是在 R2014a及更早版本):
str = '12-Apr-2015 11:22:23.123';
num = datenum(str,'dd-mmm-yyyy HH:MM:SS.FFF'); % string -> serial
str = datestr(num,'dd-mmm-yyyy HH:MM:SS.FFF'); % serial -> string
从R2014b开始,有更好的时间/日期数据实现。因此,您可以使用datetime
- 对象。
str = '12-Apr-2015 11:22:23.123';
obj = datetime(str,'InputFormat','dd-MMM-yyyy hh:mm:ss.SSS');
obj.Format = 'dd-MMM-yyyy hh:mm:ss.SSS';
使用timeseries
- 对象,您必须输入序列化日期(在本例中为变量num
),因为没有有效输入格式的字符串,毫秒为timeseries
- 对象
% your strings
dateStr = ['01-Mar-2008 18:28:51.810';
'01-Mar-2008 18:29:05.646';
'01-Mar-2008 18:29:07.376';
'01-Mar-2008 18:29:09.105';
'01-Mar-2008 18:29:10.835'];
% string -> serial
dateNum = datenum(dateStr,'dd-mmm-yyyy HH:MM:SS.FFF'); % string -> serial
% serial -> string (uncomment to see if the serialized version is ok
%dateStr2 = datestr(dateNum,'dd-mmm-yyyy HH:MM:SS.FFF');
% generate sample data
x = ones(length(dateNum),1);
% create timeseries-object
tsobject = timeseries(x, dateNum, 'name', 'X-ord');
% display time in timeseries-object with defined format
datestr(tsobject.Time(:),'dd-mmm-yyyy HH:MM:SS.FFF')
返回:
ans =
01-Mar-2008 18:28:51.810
01-Mar-2008 18:29:05.646
01-Mar-2008 18:29:07.376
01-Mar-2008 18:29:09.105
01-Mar-2008 18:29:10.835