Load date/time data and being recognized for further time related subtraction/addtions

2 次查看(过去 30 天)
I have a text data file, which includes timestamp like 20150727084239.533 which represent 2015-07-27 08:42:39.533. And I have two questions when dealing with these. 1. how can I use textscan and have it recognized as time? I have the current code shown below, and it only load into the data array as numbers.
Load Vehicle A_0727_L2 Timestamp
filename='Vehicle A_0727_1200.txt';
fid=fopen(filename,'r');
for k=1:2;
tline=fgetl(fid);
end
timestamp1200=zeros(1,7931);
t=1;
while tline~=-1
datestr=regexp(tline,'(?<=STime="20150727).*(?=" ETime)','match');
tempdata2=textscan(datestr{1},'%f');
timestamp1200(:,t)=tempdata2{1};
t=t+1;
tline = fgetl(fid);
end
fclose all;
When I use %{HH:mm:ss.FFF}D to replace %f, system returns the following errors:
Error using textscan
Unable to read the DATETIME data with the format 'HH:mm:ss.FFF'. If the
data is not a time, use %q to get string data.
Error in C_July27_L2_Data (line 39)
tempdata2=textscan(datestr{1},'%{HH:mm:ss.FFF}D');
2. How do I use the load time to perform subtraction like 463 seconds from the loaded data, etc.
thanks!

采纳的回答

Derick Yang
Derick Yang 2017-8-8
Try using the datetime function instead of textscan. In your case, you can use the following format:
tempdata2 = datetime(datestr{1}, 'InputFormat', 'yyyyMMddHHmmss.SSS')
Note that this will give you a datetime object. With a datetime object you can perform date arithmetic. To subtract from your date object:
tempdata2 - seconds(463).
  3 个评论
Derick Yang
Derick Yang 2017-8-8
This error means you need to reference datestr as a matrix rather than a cell array, using parentheses. Instead of datestr{1}, use datestr(1)
Ivy Chen
Ivy Chen 2017-8-8
I replace the {} with parentheses, as following
Load Vehicle A_0727_L2 Timestamp
filename='Vehicle A_0727_1200.txt';
fid=fopen(filename,'r');
for k=1:2;
tline=fgetl(fid);
timedata=zeros(1,7931);
t=1;
while tline~=-1
datestr=regexp(tline,'(?<=STime=").*(?=" ETime)','match');
tempdata2=datetime(datestr(1), 'InputFormat', 'yyyyMMddHHmmss.SSS');
timedata(:,t)=tempdata2(1);
t=t+1;
tline = fgetl(fid);
end
But it now show a different error message as following:
The following error occurred converting from datetime to double:
Undefined function 'double' for input arguments of type 'datetime'. To convert from datetimes to numeric,
first subtract off a datetime origin, then convert to numeric using the SECONDS, MINUTES, HOURS, DAYS, or
YEARS functions.
Error in Timestamp_Data (line 13)
timedata(:,t)=tempdata2(1);

请先登录,再进行评论。

更多回答(1 个)

KL
KL 2017-8-8
编辑:KL 2017-8-8
You could do it just by reading it as a string at first and then convert that string using datestr,
>> s = '20150727084239.533';
>> date = datestr([s(1:4),'-',s(5:6),'-',s(7:8),' ',s(9:10),':',s(11:12),':',s(13:end)])
date =
'27-Jul-2015 08:42:39'

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by