rounded time value with intervals

9 views (last 30 days)
Elena
Elena on 20 Feb 2022
Edited: Cris LaPierre on 21 Feb 2022
Im trying to convey the seconds since midnight into the format HH:MM PM (or AM). So far I have this:
secondsSinceMidnight = 26850.431
minuteInterval = 15
datestr(seconds(timestamp),'HH:MM PM')
The problem is that when it's an time like '7:27 AM', it needs to say '07:30 AM' ( i.e. have the zero in front and round up to closest 15 min interval).
How would I go about those two fixes?

Accepted Answer

Voss
Voss on 20 Feb 2022
Something like this might work for your purposes:
secondsSinceMidnight = 26850.431;
minuteInterval = 15;
% round *up* to next 15 minutes:
% timestamp = ceil(secondsSinceMidnight/60/minuteInterval)*minuteInterval*60;
% or round to *nearest* 15 minutes:
timestamp = round(secondsSinceMidnight/60/minuteInterval)*minuteInterval*60;
% make a character array via datestr():
str = datestr(seconds(timestamp),'HH:MM PM');
% datestr doesn't include leading 0 with AM/PM format (see documentation),
% so: manually put leading 0 in if necessary:
if str(1) == ' '
str(1) = '0';
end
disp(str);
07:30 AM

More Answers (1)

Cris LaPierre
Cris LaPierre on 20 Feb 2022
Edited: Cris LaPierre on 21 Feb 2022
I think in this case, it's easiest to round the seconds to the closest 15-minute increment. This uses 24-hr time, so no AM/PM is necessary.
minuteInterval = 15;
secondsSinceMidnight = 26850.431;
% calculate the closest 15-minute increment
seconds15min = round(secondsSinceMidnight/minuteInterval/60)*minuteInterval*60;
% Convert to a duratoin
t = seconds(seconds15min)
t = duration
27000 sec
% format the time
t.Format = 'hh:mm'
t = duration
07:30

Products

Community Treasure Hunt

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

Start Hunting!