Azzera filtri
Azzera filtri

Combining two datetime columns into one

35 visualizzazioni (ultimi 30 giorni)
Hi
I am trying to combine two columns in a table that are formated as datetime. Date is in format 'mm/dd/yyy' and Time is in format 'HH:mm'
I have tried:
%Obs_data.Timestamp = Obs_data.Date + Obs_data.Time;
Error
Addition is not defined between datetime arrays.

Risposta accettata

Star Strider
Star Strider il 9 Mar 2022
Another option is to use timeofday
Date = repmat(datetime('now','Format','MM/dd/yyyy'), 3, 1);
Time = datetime('now','Format','HH:mm','Timezone','UTC-7') + hours(0:2).';
Obs_data = table(Date,Time)
Obs_data = 3×2 table
Date Time __________ _____ 03/09/2022 08:54 03/09/2022 09:54 03/09/2022 10:54
Obs_data.Timestamp = Obs_data.Date + timeofday(Obs_data.Time)
Obs_data = 3×3 table
Date Time Timestamp __________ _____ __________ 03/09/2022 08:54 03/10/2022 03/09/2022 09:54 03/10/2022 03/09/2022 10:54 03/10/2022
Obs_data.Timestamp.Format = 'MM/dd/yyyy HH:mm'
Obs_data = 3×3 table
Date Time Timestamp __________ _____ ________________ 03/09/2022 08:54 03/10/2022 00:48 03/09/2022 09:54 03/10/2022 01:48 03/09/2022 10:54 03/10/2022 02:48
.

Più risposte (2)

David Hill
David Hill il 9 Mar 2022
d=[Obs_data.Date,' ',Obs_data.Time];
datetime(d,'InputFormat','MM/dd/yyyy HH:mm');
  2 Commenti
Autumn P
Autumn P il 9 Mar 2022
This did not work for me. I got the following error
Error using datetime/horzcat (line 1387)
Dimensions of arrays being concatenated are not consistent.
David Hill
David Hill il 9 Mar 2022
d=[Obs_data.Date,repmat(' ',size(Obs_data.Date,1),1),Obs_data.Time];%assuming the dates and times are character arrays
%d=[char(Obs_data.Date),repmat(' ',size(Obs_data.Date,1),1),char(Obs_data.Time)];
%use above to convert to char arrays if necessary
datetime(d,'InputFormat','MM/dd/yyyy HH:mm');

Accedi per commentare.


Steven Lord
Steven Lord il 9 Mar 2022
Why is your Time data stored as a datetime array? IMO it would make more sense for you to import or create it as a duration array.
I don't know how to add yesterday and tomorrow in a way that makes sense but I know how to add right now and 6 hours.
rightNow = datetime('now')
rightNow = datetime
09-Mar-2022 14:45:42
h = hours(6)
h = duration
6 hr
sixHoursFromNow = rightNow + h % datetime + duration = datetime
sixHoursFromNow = datetime
09-Mar-2022 20:45:42
If you're reading your time data as text (say from a file) you can convert that to a duration array pretty easily.
h2 = duration('01:23', 'InputFormat', 'hh:mm')
h2 = duration
01:23:00
anHour23MinutesFromNow = rightNow + h2
anHour23MinutesFromNow = datetime
09-Mar-2022 16:08:42

Categorie

Scopri di più su Dates and Time in Help Center e File Exchange

Tag

Prodotti


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by