Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.10.2010, 16:40
MTF MTF вне форума
Прохожий
 
Регистрация: 13.10.2010
Сообщения: 3
Репутация: 10
По умолчанию Function миллисекунды в формат времени

Добрый день возникла проблема с написанием функции преобразование миллисекунд в формат времени

проблемы с делением !!!!

Код:
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  
Старый 13.10.2010, 16:52
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Вы как-то странно считаете. Давайте вместе :
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  
Старый 13.10.2010, 17:11
MTF MTF вне форума
Прохожий
 
Регистрация: 13.10.2010
Сообщения: 3
Репутация: 10
По умолчанию

dr. F.I.N. а без остатка как будет выглядеть !!!
Ответить с цитированием
  #4  
Старый 13.10.2010, 19:55
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Ты меня просто убиваешь. Тут программированием и не пахнет. Математика 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  
Старый 13.10.2010, 21:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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  
Старый 14.10.2010, 10:31
MTF MTF вне форума
Прохожий
 
Регистрация: 13.10.2010
Сообщения: 3
Репутация: 10
Радость

Все сделал !!!


Код:
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;


Огромное всем спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025