How to change HH:mm:ss:SSS to HH:mm:ss.SSS for a column?

11 次查看(过去 30 天)
Hi, I'm collecting a data .txt file with multiple columns. One column is time but the issue is that the software I use exports the time data as HH:mm:ss:SSS (Note the last semicolon should be a period) and theres around 70,000 data points. I'm using readtable to create graphs. My question is: How to convert each data point of time in the column from HH:mm:ss:SSS to HH:mm:ss.SSS? Thank you for your help and insight.
  2 个评论
Walter Roberson
Walter Roberson 2023-4-20
Could you confirm that the data is currently read in as cell array of character vectors stored in the table?

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2023-4-21
移动:Walter Roberson 2023-4-21
time = {'01:18:34:754'; '13:04:19:999'}
time = 2×1 cell array
{'01:18:34:754'} {'13:04:19:999'}
converted = duration(string(datetime(time, 'InputFormat', 'HH:mm:ss:SSS', 'Format', 'HH:mm:ss.SSS')), 'format', 'hh:mm:ss.SSS')
converted = 2×1 duration array
01:18:34.754 13:04:19.999
  2 个评论
Walter Roberson
Walter Roberson 2023-4-21
Unfortunately, duration() will only accept a small number of InputFormat, so the conversion cannot be direct.
Walter Roberson
Walter Roberson 2023-4-21
time = {'01:18:34:754'; '13:04:19:999'}
time = 2×1 cell array
{'01:18:34:754'} {'13:04:19:999'}
temp = char(time);
temp(:,end-3) = '.';
converted = duration(cellstr(temp), 'Format', 'hh:mm:ss.SSS')
converted = 2×1 duration array
01:18:34.754 13:04:19.999

请先登录,再进行评论。

更多回答(2 个)

chicken vector
chicken vector 2023-4-20
编辑:chicken vector 2023-4-20
if the time format is imported from the .txt as a string, you can do the following using a for loop for every element:
time = '01:18:34:754';
semicolons = strfind(time, ':');
time(semicolons(end)) = '.'
time =
'01:18:34.754'
To speed things up, since the format is standardsed, you can also do directly:
time(9) = '.';
Otherwise you need to specify what format are you working with.
Also I suggest you to have a look at duration which you may find helpful.
  2 个评论
Walter Roberson
Walter Roberson 2023-4-21
This needs a bit of modification for entries coming from a table, as those would either be a cell array of character vectors (more likely) or a string array (only if specifically configured for.)
chicken vector
chicken vector 2023-4-21
编辑:chicken vector 2023-4-21
You are right, I was trying not to speculate too much given the little information provided, but assuming a cell array is definetly the right choice.

请先登录,再进行评论。


Stephen23
Stephen23 2023-4-21
编辑:Stephen23 2023-4-21
time = {'01:18:34:754'; '13:04:19:999'};
data = rand(2,1);
T = table(time,data)
T = 2×2 table
time data ________________ _______ {'01:18:34:754'} 0.73654 {'13:04:19:999'} 0.68067
tmp = regexprep(T.time,':(?=\d{3})','.');
T.time = duration(tmp, 'Format','hh:mm:ss.SSS')
T = 2×2 table
time data ____________ _______ 01:18:34.754 0.73654 13:04:19.999 0.68067

Community Treasure Hunt

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

Start Hunting!

Translated by