Convert date data in datetime
이전 댓글 표시
Dear Matlab Community,
I have uplaoded the small subset of the data which I am using;
I am converting it in dateime using:
date = datetime(string(data.Date),'InputFormat','yyyyMMddHH' ) ;
I have also attached the output file.
I will also like to add that the original file is in csv format, I am using 'readtable' to read and process it in Matlab.
The problem is date corresponding to 24hrs is not coverted in datetime.
Any help will be highly appreciated.
Many thanks.
댓글 수: 5
the cyclist
2023년 12월 19일
Rather than pasting the data (which is potentially ambiguous as to how it is stored), can you upload the data in a MAT file? You can use the paper clip icon in the INSERT section of the toolbar.
Here is a simpler, self-contained example that illustrates @PS's question. The last element does not convert (because the hour is listed as '24'):
date_data = ["2016010101","2016010113","2016010124"];
datetime(date_data,'InputFormat','yyyyMMddHH')
PS
2023년 12월 19일
Stephen23
2023년 12월 19일
"I will also like to add that the original file is in csv format, I am using 'readtable' to read and process it in Matlab."
Please upload a sample CSV file, to see if the importing can be improved.
채택된 답변
추가 답변 (2개)
Fangjun Jiang
2023년 12월 19일
편집: Fangjun Jiang
2023년 12월 19일
You could treat the last two digits as duration. Code below is not optimized but gives the correct result.
load Data.mat;
date_data=char(string(data.Date));
a=char(date_data);
b=a(:,1:end-2);
c=a(:,end-1:end);
d=datetime(b,'InputFormat','yyyyMMdd')+hours(str2num(c))
02-Jan-2016 20:00:00
02-Jan-2016 21:00:00
02-Jan-2016 22:00:00
02-Jan-2016 23:00:00
03-Jan-2016 00:00:00
03-Jan-2016 01:00:00
Another solution is the numeric datetime constructor syntax (i.e. t = datetime(Y,M,D,H,MI,S)), which allows values outside the conventional range:
"If an element of the Y, M, D, H, MI, or S inputs falls outside the conventional range, then datetime adjusts both that element and the same element of the previous input."
Since your timestamps always have the same field widths, you can 1) extract each field, 2) convert to numeric, and 3) call the datetime constructor.
load data.mat
% Convert Date to string
data = convertvars(data, "Date", "string");
% Extract date and time fields
data = addvars(data, extractBetween(data.Date, 1, 4), Before=1, NewVariableNames="Year");
data = addvars(data, extractBetween(data.Date, 5, 6), After=1, NewVariableNames="Month");
data = addvars(data, extractBetween(data.Date, 7, 8), After=2, NewVariableNames="Day");
data = addvars(data, extractBetween(data.Date, 9, 10), After=3, NewVariableNames="Hour");
% Convert fields to numeric
data = convertvars(data, ["Year","Month","Day","Hour"], "double");
% Construct datetime
data = addvars(data, datetime(data.Year, data.Month, data.Day, data.Hour, 0, 0), Before=1, NewVariableNames="Datetime");
tail(data)
카테고리
도움말 센터 및 File Exchange에서 Dates and Time에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!