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

52 次查看(过去 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

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by