combine date & time
Mostrar comentarios más antiguos
I've got an array that has 3 columns. Column 1 is a counter and I don't care about it, column 2 has the date in 'dd/mm/yy' format and column 3 has the time in 'HH:MM' format. I want to combine comlumn 2 and 3 so I can convert them to a serial format.
This is my code:
day = import1.textdata(2:end,2);
time = import1.textdata(2:end,3);
ns = arrayfun(@(n) datenum([day(n) time(n)],'dd/mm/yy HH:MM'),1:length(day),'UniformOutput', 0);
I am getting this error:
Error using ==> dtstr2dtnummx
Failed on converting date string to date number.
how can I resolve this? Is there an easier way to do this?
Thanks!
1 comentario
sivakumar dumpala
el 14 de Mayo de 2016
just concatenate those two columns.
time=[day,time]
Respuesta aceptada
Más respuestas (2)
Matt Tearle
el 28 de Mzo. de 2012
What class are day and time? If they are char arrays, then:
ns = datenum(strcat(day,32,time));
If they are cell arrays, then
ns = datenum(strcat(day,{' '},time));
EDIT TO ADD: As Jan points out, you don't even need the space if you specify the date format yourself, so:
ns = datenum(strcat(day,time),'dd/mm/yyHH:MM');
works for cells or chars.
2 comentarios
Jan
el 28 de Mzo. de 2012
You even do not need the space {' '}, when the format is defined accordingly as 'dd/mm/yyHH:MM'.
Matt Tearle
el 28 de Mzo. de 2012
Cunning!
C.J. Harris
el 28 de Mzo. de 2012
Be careful when working with arrays in this manner. The terms day(n) and time(n) probably don't contain what you are expecting them to. Depending on what format your time and day array are in this might be a possible solution:
day = ['01/05/12'; '01/05/12'; '01/05/12'; '01/05/12'];
time = ['23:12'; '23:13'; '23:14'; '23:15'];
ns = arrayfun(@(n) datenum([day(n,:),' ',time(n,:)],'dd/mm/yy HH:MM'),1:size(day,1),'UniformOutput', 0);
3 comentarios
Trader
el 28 de Mzo. de 2012
C.J. Harris
el 28 de Mzo. de 2012
My point was that if you are using 'arrayfun' then your dates and times are probably stored as an array. Indexing into the 'day' and 'time' array in the manner showed in your question will therefore only give you one character. That's why I changed the indexing and added a space in the solution I suggested.
Matt Tearle
el 28 de Mzo. de 2012
And if they are char arrays, then Chris's point about indexing also applies to what you tried with day(:). Linear indexing always goes down the columns of an array, because MATLAB stores data that way. Hence, if day is the char array that Chris gave in his answer, then day(:) gives '00001111////00005555...' (ie taking the characters one at a time, down each column in turn).
Categorías
Más información sobre Time Series Objects en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!