How do I convert tall array duration time vector to HH:mm:ss for merging with tall array datetime vector ?

7 次查看(过去 30 天)
Need some help with this. I have a tall array date vector 'yyyy-MM-dd' of datetime format, and a tall array time vector 'HH:mm:ss.SSS' of duration format. How do I convert the duration vector to only HH:mm:ss (omitting the decimals) and then combine that with the date vector to get: 'yyyy-MM-dd HH:mm:ss' ?

采纳的回答

Chris
Chris 2022-1-21
dates = tall(repmat(datetime(date),3,1))
dates = 3×1 tall datetime array 21-Jan-2022 21-Jan-2022 21-Jan-2022
times = tall(repmat(duration(15,12,1,345,'Format','hh:mm:ss.SSS'),3,1))
times = 3×1 tall duration array 15:12:01.345 15:12:01.345 15:12:01.345
times.Format = 'hh:mm:ss';
datetime([string(dates) + " " + string(times)])
ans = 3×1 tall datetime array 21-Jan-2022 15:12:01 21-Jan-2022 15:12:01 21-Jan-2022 15:12:01
  9 个评论
Chris
Chris 2022-4-19
编辑:Chris 2022-4-19
Hello again, Douglas.
How about the following?
dates = datestr(theTable{:,1},'dd-mmm-yyyy');
durs = datestr(theTable{:,2},'HH:MM:SS');
merged = datetime(dates + " " + durs);
You could also shift the table around:
theTable.Var1 = merged;
theTable.Var2 = [];

请先登录,再进行评论。

更多回答(1 个)

Walter Roberson
Walter Roberson 2022-1-21
perhaps
[h,m,s] = hms(DURATION_COLUMN);
DATETIME_COLUMN = TIME_COLUMN + duration(h,m,floor(s))
or perhaps
DATETIME_COLUMN = dateshift(TIME_COLUMN + DURATION_COLUMN, 'start', 'second')
if you do not have negative durations or negative datetimes, then adding first and then getting rid of the fractions of a second should give the same result.

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by