As I came across this post when searching for this issue, since there still seems to be no out-of-the-box solution, I will post my solution for other people who might need it.
This works in separate compose actions or you can make a single long one, combining the formulas. Should also work with AM/PM times if in the last step the formatDateTime is changed accordingly.
Probably someone else will have a more compact/optimised version but here you go.
"TIMEINPUT": Time input
The seconds:
"OUTPUTSECONDS": div(add(int(formatDateTime(TIMEINPUT, 'ss')), 30), 60) = either 0 or 1
The minutes:
"OUTPUTMINUTES": mul(div(add(add(int(formatDateTime(TIMEINPUT, 'mm')), 7), OUTPUTSECONDS), 15), 15) = either 0, 15, 30, 45 or 60
The hours:
"OUTPUTHOURS": formatDateTime(addHours(TIMEINPUT, if(equals(OUTPUTMINUTES, 60), 1, 0)), 'HH')
The full time:
formatDateTime(concat(OUTPUTHOURS, ':', if(equals(OUTPUTMINUTES, 60), 0, OUTPUTMINUTES), ':00'), 'HH:mm:ss')