我有一些日期为
的文本文件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
答案 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
>>