Программно вычисляем время+(-)минуты=новое время
Странно, что такой простой расчёт вызвал затруднения у вроде бы программеров,
искали какие-то отсутствующие функции... Итак, задано время h
часов m
минут, нужно
прибавить или вычесть d
минут и получить новое время h2
часов m2
минут, где
h2
принадлежит диапазону 0-23
, а m2
- диапазону 0-59
, при этом переход совершается не обязательно в течение суток.
Простейшая написанная за пару минут реализация алгоритма может быть такой (Free Pascal):
var h,m,d,t,h2,m2:integer; begin h:=23; {Часы} m:=50; {Минуты} d:=1460; {Прибавить минут (или вычесть, если число d<0)} t:= h*60+m+d; {Переводим всё в минуты} while t<0 do t:=1440+t; {Учитываем переход через сутки} h2:= t div 60; {Новые часы} m2:= t-h2*60; {Новые минуты} h2:= h2 mod 24; {Часы переводим в диапазон 0-23} writeln ('Задано время ',h:2,':',m:2,', прибавили минут: ',d, ' получили время ',h2:2,':',m2:2); readln; end.
Все действия видны в листинге, думаю, приведённый алгоритм нетрудно перевести на другие языки
(операция div
- деление нацело, mod
- взятие остатка от деления, описаны, например,
здесь). Паскаль не добавит лидирующие нули при выводе
часов или минут, меньших 10, но этого легко добиться в более развитых языках.
Наверное, строчку с циклом while
лучше заменить на условный оператор
if t<0 then begin t:=t+(-t div 1440)*1440; t:=1440+t; end;
- тоже должно работать.
Если где-то ошибся, исправления будут на постоянной странице статьи
10.07.2012, 14:46 [9702 просмотра]