MATLAB Answers

How do I separate date and time of a raw date?

32 views (last 30 days)
aishah
aishah on 30 Mar 2018
Commented: Walter Roberson on 24 Feb 2019
>> a = untitled.startDate(1:10)
a =
10×1 categorical array
2013-07-10 00:01:00.0
2013-07-17 00:01:00.0
2013-06-29 00:01:00.0
2013-07-17 00:01:00.0
2013-05-11 00:01:00.0
2013-05-31 00:01:00.0
2013-06-06 00:01:00.0
2013-08-31 00:01:00.0
2013-05-21 00:01:00.0
2013-08-06 00:01:00.0
>> a.Format = 'dd-MMM-yyyy'
Error using categorical/subsasgn (line 87)
Attempt to assign field of non-structure array.

  3 Comments

Walter Roberson
Walter Roberson on 30 Mar 2018
What data was used to create the categorical array? Was categorical() applied to datetime() values, or was it applied to a cell array of character vectors?
aishah
aishah on 30 Mar 2018
What I did was, I imported the data into a 'table'. And I convert the data to 'Categorical Array'.
aishah
aishah on 30 Mar 2018
The imported data type is 'datetime'.

Sign in to comment.

Accepted Answer

Ahmet Cecen
Ahmet Cecen on 30 Mar 2018
Edited: Ahmet Cecen on 30 Mar 2018
arrayfun(@(x) strsplit(x,' '),string(a),'UniformOutput',false)
string(a) - this makes the data easily process-able, converts to a string array.
@(x) strsplit(x,' ') - this is a function that splits each string into parts whenever a space(' ') is located(which works for your case)
arrayfun - applies the above function to each "row" in the string array.

  7 Comments

Show 4 older comments
Ahmet Cecen
Ahmet Cecen on 30 Mar 2018
Ah, here:
b = reshape([k{:}],2,length(a))'
Now:
b(:,1)
b(:,2)
aishah
aishah on 30 Mar 2018
b = reshape([k{:}],2,length(a))'
Undefined variable "k" or class "k".
aishah
aishah on 30 Mar 2018
celldisp(b)
b{1} =
"2013-07-10" "00:01:00.0"
b{2} =
"2013-07-17" "00:01:00.0"
b{3} =
"2013-06-29" "00:01:00.0"
b{4} =
"2013-07-17" "00:01:00.0"
b{5} =
"2013-05-11" "00:01:00.0"
b{6} =
"2013-05-31" "00:01:00.0"
b{7} =
"2013-06-06" "00:01:00.0"
b{8} =
"2013-08-31" "00:01:00.0"
b{9} =
"2013-05-21" "00:01:00.0"
b{10} =
"2013-08-06" "00:01:00.0"

Sign in to comment.

More Answers (1)

Peter Perkins
Peter Perkins on 2 Apr 2018
Don't do any of that.
You've read the timestamps in as datetimes. Don't fight that. Assuming you have a table T:
T.StartTime = timeofday(T.StartDate);
T.StartDate = dateshift(T.StartDate,'start','day);

  6 Comments

Show 3 older comments
Walter Roberson
Walter Roberson on 18 Feb 2019
Does it make sense to perform regression on a time of day? Do you not worry about differences in results if the time is represented as 100^2 * hour + 100 * minutes + seconds, compared to 60^2 * hour + 60 * minutes + seconds ? Do you not worry about differences in results if you represent date as 100^2 * month_number + 100 * day_number + two_digit_year, compared to 100^2 * two_digit_year + 100 * month_number + day_number, compared to year plus decimal fraction of a fixed-length year, compared to year plus decimal fraction of year taking into account leap year and leap seconds ?
I think you should reconsider doing regression on dates or times of day.
Perhaps it would make sense to instead calculate a duration in seconds relative to the earliest datetime ? Perhaps it would make sense to table2array(TheTable(:,3:end)) so you are not extracting the date or time information ?
Steph
Steph on 24 Feb 2019
I missteated my problem I think, I am doing regressions on the data that is collected on each of the specific days. Not on the dates or days themselves
Walter Roberson
Walter Roberson on 24 Feb 2019
Then you do not need to convert the dates + times or datetime objects to numeric. What you need to do is be able to group your data based upon date. You should have a look at splitapply() -- or convert the table to a timetable() object and use retime()

Sign in to comment.

Tags


Translated by