首页 文章

如何在matlab时间序列对象中表示秒的小数部分?

提问于
浏览
3

我想用以下格式在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: ''

1 回答

  • 2

    这应该做的工作(特别是在 R2014a and earlier ):

    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
    

    Starting from 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';
    

    With timeseries-objects ,您必须输入序列化日期(在本例中为变量 num ),因为对于 timeseries -objects的毫秒,字符串没有有效的输入格式 .

    % 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
    

相关问题