![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день возникла проблема с написанием функции преобразование миллисекунд в формат времени
проблемы с делением !!!! Код:
function TForm1.GetTimeFromSecs(msec : Integer) : String;
var
hh, mm, ss ,sss: integer;
begin
ss := msec div 1000;
// mm := msec mod 6000;
// hh := mm div 3600;
if hh <> 0 then
Result:=Format('%2.2d:%2.2d:%2.2d', [hh,mm,ss])
else
Result:=Format('%2.2d:%2.2d', [mm,ss]);
end; |
|
#2
|
||||
|
||||
|
Вы как-то странно считаете. Давайте вместе
:1. В 1 секунде 1000 мс. 2. В 1 минуте 60 секкунд. 3. В 1 часе 60 минут. Для начала определим большее (часы): hh := msec div (60 * 60 * 1000) Глянем остаток: ost := msec - hh * (60 * 60 * 1000) Если остаток > 0, то продолжаем. Определим минуты: mm := ost div (60 * 1000) Опять смотрим остаток: ost := mm * (60 * 1000) Если остаток > 0, то продолжаем. Определим секунды: ss := ost div 1000 Ну и еще раз вычислив аналогично остаток, получим миллисекунды: mms := ost - ss * 1000 Фсе ![]() Можно сделать и без переменной под остаток. |
|
#3
|
|||
|
|||
|
dr. F.I.N. а без остатка как будет выглядеть !!!
|
|
#4
|
||||
|
||||
|
Ты меня просто убиваешь. Тут программированием и не пахнет. Математика 5й (если не младше) класс:
1. hh := msec div (60*60*1000); 2. mm := (msec - hh*(60*60*1000)) div (60*1000); 3. ss := msec - (hh*60 - mm)*60*1000; 4. mss := msec - (hh*60*60 - mm*60 - ss)*1000; P.S. мог ошибиться при упрощении и выносе общего множителя за скобки. Ночь за окном, голова не варит. |
|
#5
|
|||
|
|||
|
Код:
procedure TimeDiv(ASrc, ADivider : Integer; var ADiv, AMod : Integer);
begin
ADiv := ASrc div ADivider;
AMod := ASrc mod ADivider;
end;
var
msecs : Integer;
dd, hh, mm, ss, ms : Integer;
begin
msecs := 123456789; // Начальное значение, должно задаваться извне
TimeDiv(msecs, 1000, ss, ms); // сек и мсек из мсек
TimeDiv(ss, 60, mm, ss); // мин и сек из сек
TimeDiv(mm, 60, hh, mm); // часы и мин из мин
// TimeDiv(hh, 24, dd, hh); // дни и часы из часов
ShowMessage(Format('%d часов %d минут %d секунд %d мсекунд',[hh,mm,ss,ms]);
end; |
|
#6
|
|||
|
|||
|
Все сделал !!!
Код:
function TForm1.GetTimeFromSecs(msec : Integer) : String;
var
hh, mm, ss ,sss: integer;
begin
sss := msec div 1000;
ss := (sss mod 3600) mod 60;
mm:= (sss mod 3600) div 60 ;
hh := sss div 3600;
if hh <> 0 then
Result:=Format('%2.2d:%2.2d:%2.2d', [hh,mm,ss])
else
Result:=Format('%2.2d:%2.2d', [mm,ss]);
end;Огромное всем спасибо |