merging column elements into one
1 view (last 30 days)
Show older comments
I have a matrix of 4 columns containing year in 1st column, month in 2nd, day in 3rd, and time in 4th. Is there a way to combine them into 1 column to get 'dd-mmm-yyyy HH:MM:SS' ?
Thanks
2 Comments
Walter Roberson
on 28 Mar 2016
What is the datatype of your matrix? If it is a cell, then what is the format of each of the columns at present?
Answers (4)
Azzi Abdelmalek
on 28 Mar 2016
Look at this example
v={'2016' '03' '02' '12:10:00';'2016' '03' '02' '13:20:00'}
out=arrayfun(@(x) [v{x,1} '-' v{x,2} '-' v{x,3} ' ' v{x,4}] , (1:size(v,1))','un',0)
1 Comment
Azzi Abdelmalek
on 28 Mar 2016
Edited: Azzi Abdelmalek
on 28 Mar 2016
v=[2015 2 1 1;2016 2 10 2]
w=[v zeros(size(v,1),2)]
out=datestr(w,'yyyy-mm-dd HH:MM:SS')
Walter Roberson
on 28 Mar 2016
v={'2016' '03' '02' '12:10:00';'2016' '03' '02' '13:20:00'}
strcat(v(:,1),{'-'},v(:,2),{'-'},v(:,3), {' '}, v(:,4))
but only if v happens to be in the correct format already, which is something we do not know yet as you have not replied about what the format of your array is.
Roger Stafford
on 28 Mar 2016
You can easily compress seconds, minutes, hours, days of the month, months, and years into one double precision floating point number. It has more than enough capacity. Let T be a vector with six elements: [year number, month number, day of month number, hour, minutes, seconds]. To convert to a single 'double':
d = T(6)+64*(T(5)+64*(T(4)+64*(T(3)+64*(T(2)+64*T(1)))));
(There is room here to go up past the year 8000000.) To convert back to T vector:
function T = dec2base64(d)
T = zeros(1,6);
for k = 6:-1:2
q = floor(d/64);
T(k) = d - 64*q;
d = q;
end
T(1) = d;
return
0 Comments
See Also
Categories
Find more on Dates and Time in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!