How do I separate date and time of a raw date?
古いコメントを表示
>> 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 件のコメント
Walter Roberson
2018 年 3 月 30 日
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
2018 年 3 月 30 日
aishah
2018 年 3 月 30 日
採用された回答
その他の回答 (1 件)
Peter Perkins
2018 年 4 月 2 日
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 件のコメント
Steph
2019 年 2 月 17 日
Hi, I am excatly trying to seperate datetimes into day and time columns seperately using matlab 2017b. Peter, unfortunately your code says unrecognized property:StartDate
Walter Roberson
2019 年 2 月 17 日
The original poster of the question had a table or struct field named StartDate .
If you have a table which has a variable which is in datetime format then in the code that Peter showed, replace the T.StartTime with the name of your table variables
T.StartTime = timeofday(T.NameOfYourDatetimeColumnGoesHere);
T.NameOfYourDatetimeColumnGoesHere = dateshift(T.NameOfYourDatetimeColumnGoesHere, 'start', 'day');
Steph
2019 年 2 月 18 日
Dear Walter' Thank you very much for taking time to write to me.
This works perfectly.
I am trying to change this table to a double array so I can perform some regressions on it. Hence I used table2 array, now it says it can not concatenate the specified table variables, all inputs must be date/time character vectors or date/time strings.
I think after this conversion, matlab still treats these date and time columns as datetime formatted.
How can I get rid of this problem and convert the table to a double array without losing the date and time information? Do you have any idea?
I need to keep date and time information as they will be valuable for further analysis.
Walter Roberson
2019 年 2 月 18 日
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
2019 年 2 月 24 日
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
2019 年 2 月 24 日
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()
カテゴリ
ヘルプ センター および File Exchange で Timetables についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!