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

时间:2015-12-09 21:17:30

标签: matlab time milliseconds

我有一些日期为

的文本文件
  

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数字),然后将其转换为日期/时间数字 - 但这是耗费时间的,因此我无法将其用于我的数据。我在不同的文件中有数百万个时间行。

你有什么想法吗?

问候,Arne

3 个答案:

答案 0 :(得分:1)

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

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条目。

有更优雅的方式吗?

答案 1 :(得分:0)

您可以尝试以下方式:

var board =
[
    {
        "name":"category1",
        "questions":[
            {
                "value":100,
                "question":"Question 1 in category 1 for 100 points",
                "answers":[
                    {
                        "text":"A",
                        "correct":true
                    },
                    {
                        "text":"B",
                        "correct":false
                    },
                    {
                        "text":"C",
                        "correct":false
                    },
                    {
                        "text":"D",
                        "correct":false
                    }
                ]
            },
            {
                "value":200,
                "question":"Question 2 in category 1 for 200 points",
                "answers":[
                    {
                        "text":"A",
                        "correct":true
                    },
                    {
                        "text":"B",
                        "correct":false
                    },
                    {
                        "text":"C",
                        "correct":false
                    },
                    {
                        "text":"D",
                        "correct":false
                    }
                ]
            },
......

答案 2 :(得分:0)

我强烈建议您使用新的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
>>