首页 文章

Matlab:将文件日期以毫秒转换为Matlab时间格式

提问于
浏览
1

我有一些带有表格日期的文本文件

2015-09-08 14:38:03 2015-09-08 14:38:03.1 2015-09-08 14:38:03.2

我想转换成Matlab日期/时间格式 . 如您所见,文本字符串具有与毫秒不同的时间格式 . 在第一种情况下,没有给出毫秒;在秒的情况下,毫秒只给出一个数字 . 这为测量数据提供了20Hz的采样率 .

到目前为止,只有

x = datenum(file.dateColumn,'yyyy-mm-dd HH:MM:SS');

正在工作,但当然错过了毫秒 . 像转换一样

x = datenum(file.dateColumn,'yyyy-mm-dd HH:MM:SS.FFF');

不起作用,因为毫秒为零(全秒)或在' . '之后有一位数 . 分隔符 . 解决方法就像

x = datestr(file.dateColumn,'yyyy-mm-dd HH:MM:SS.FFF'); x = datenum(file.dateColumn,'yyyy-mm-dd HH:MM:SS.FFF');

即将文本字符串转换为Matlab字符串(并为其提供额外的FFF / FF数字),然后将其转换为日期/时间数字 - 但这是耗费时间的,因此我无法将其用于我的数据 . 我在不同的文件中有数百万个时间行 .

你有什么想法?

问候,阿恩

3 回答

  • 0

    感谢尼克,我找到了解决问题的方法:

    dataVelPres = readtable(fileName, ...
        'ReadVariableNames', false, ...
        'HeaderLines', 4 );
    
    dataVelPres.Properties.VariableNames = {'date' 'velU' 'velV' 'velW' 'pres'};
    
    dateMill = datetime(dataVelPres.date, 'inputformat', 'yyyy-MM-dd HH:mm:ss.S');
    dateFull = datetime(dataVelPres.date, 'inputformat', 'yyyy-MM-dd HH:mm:ss');
    
    dateNaT = isnat(dateMill);
    dateMill(dateNaT) = dateFull(dateNaT);
    dataVelPres.dateTime = dateMill;
    dataVelPres.date = datenum(dataVelPres.dateTime); % Convert to number format if needed
    

    这适用于两个表 - 一个用于millisec . 和一个没有 - 并将两者放在一起,因为在输入格式不匹配的情况下都给出NaT条目 .

    有更优雅的方式吗?

  • 0

    您可以尝试以下方式:

    a='2015-09-08 14:38:03';
    s=strsplit(a,{'-',':',' '})
    x=datenum(cellfun(@str2num,s(1:end)))
    
  • 1

    我强烈建议使用新的 datetime 对象:

    strings = {'2015-09-08 14:38:03', '2015-09-08 14:38:03.1', '2015-09-08 14:38:03.2'};
    dates = {};
    
    for d = strings
        d = d{1};
    
        try
            dt = datetime(d, 'inputformat', 'yyyy-MM-dd HH:mm:ss.S');
        catch
            dt = datetime(d, 'inputformat', 'yyyy-MM-dd HH:mm:ss');
        end
    
        dates{end + 1} = dt;
    end
    
    >> dates
    
    dates =
    
    [08-Sep-2015 14:38:03]    [08-Sep-2015 14:38:03]    [08-Sep-2015 14:38:03]
    
    >> dates{end}.Second
    
    ans =
    
        3.2000
    

    它也很容易从 datetime 对象转换为 datenum

    >> x = [datetime('now'), datetime('yesterday')]
    x = 
       10-Dec-2015 12:53:40   09-Dec-2015 00:00:00
    >> datenum(x)
    ans =
       1.0e+05 *
        7.3631    7.3631
    >>
    

相关问题