Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2011, 00:59   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Смех Конвертация времени ms в время минуты,секунды,часы.

Доброго времени суток!

Тестирую работу и скорость своих методов.
Хочу написать функцию которая будет определять, что это - минуты,часы,секунды,или милисекунды...


Код:
var
  StartT,EndT:LongInt;
begin
  StartT:=GetTickCount;
 {
 Операция, время выполнения которой я хочу узнать
}
 EndT:=GetTickCount-StartT; //Вря работы метода в милисекундах
 log(Format('Время выполнения: %n минут(ы).',[EndT/60/1000]));  //Результат в минутах
end;
Возвращаемый результат:
7,00 - 7 минут
7,10 - 7 минут 10 секунд
7,01 - 7 минут 1 милисекунда

Как выстроить эту логику в функции?

Заранее спасибо!
Человек_Борща вне форума Ответить с цитированием
Старый 03.07.2011, 01:20   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var h,m,s,ms: Word;
    s1: String;
    lStart,lPeriod: TDateTime;
..
  lStart:=Now;
..
  lPeriod:=Now-lStart;
  DecodeTime(lPeriod,h,m,s,ms);
  s1:='';
  if h>0 then s1:=Format('%dчас',[h]);
  if m>0 then s1:=Trim(Format('%s %dмин',[s1,m]));
  s1:=Trim(Format('%s %dсек %dмсек',[s1,s,ms]));
  Label1.Caption:=s1;
для секунд и милисекунд тоже можете анализ на 0 добавить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.07.2011 в 01:26.
Аватар вне форума Ответить с цитированием
Старый 03.07.2011, 03:16   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

не совсем то=) Если я правильно понял..

вот что мне нужно:


теперь не могу понять как её составить

Код:
function MsToTime(ms: LongInt): string;
const
  sResult = '%d h. %d m. %d s. %d ms.';
  // минимум времени в мс для:
  cH = 3600000; // час
  cM = 60000; // Минута
  cS = 1000; // Секунда
var
  itH, itM, itS: integer; // hour,min,sec
begin
  itH := 0;
  itM := 0;
  itS := 0;
  if ms >= cH then
  begin
    itH:=Round(ms/60/60/1000);
    ms:=ms-(itH*60*60*1000);
  end
  else
  begin
    if ms >= cM then
    begin

    end
    else
    begin
      if ms >= cS then
      begin

      end
      else
      begin
        if ms > 0 then
        begin
          Result := Format(sResult, [itH, itM, itS, ms]);
        end
        else
        begin
          ms := 0;
          Result := Format(sResult, [itH, itM, itS, ms]);
        end;
      end;
    end;
  end;
end;
Имеет ли смысл делать что-то по 2 раза?
Может goto применить(Вернётся ли назад компилятор, после выполнения кода по метке goto)?


P.S. как жаль в RAD удалили возможность рисовать diagram'ы=)
Собственно только из-за этого d7 и держу

Последний раз редактировалось Человек_Борща; 03.07.2011 в 03:23.
Человек_Борща вне форума Ответить с цитированием
Старый 03.07.2011, 11:34   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чуть подправив я и предлагаю вернуть в строке только не нулевые, например 1час 5сек
Код:
  s1:='';
  if h>0 then s1:=Format('%dчас',[h]);
  if m>0 then s1:=Format('%s %dмин',[s1,m]);
  if s>0 then s1:=Format('%s %dсек',[s1,s]);
  if ms>0 then s1:=Format('%s %dмсек',[s1,ms]);
  Label1.Caption:=Trim(s1);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.07.2011, 12:56   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Благодарен! Ставлю плюс.

Код:
function MSToTime(aPeriod: TDateTime): string;
var
  h, m, s, ms: Word;
  s1: String;
begin
  DecodeTime(aPeriod, h, m, s, ms);
  s1 := '';
  if h > 0 then
    s1 := Format('%d ч.', [h]);
  if m > 0 then
    s1 := Format('%s %d м.', [s1, m]);
  if s > 0 then
    s1 := Format('%s %d с.', [s1, s]);
  if ms > 0 then
    s1 := Format('%s %d мс.', [s1, ms]);
  Result := Trim(s1);
end;
Иногда вещи проще чем кажутся....
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часы и минуты перевести в минуты!!! evm-evgenij Microsoft Office Excel 8 20.04.2015 08:50
Создаём секундомер [Как сделать часы, минуты, секунды.] Jastic Общие вопросы Delphi 21 03.11.2012 22:31
CMOS и часы реального времени. stVadi Помощь студентам 0 28.02.2011 20:59
Обратный отсчет в формате минуты и секунды Shouldercannon Общие вопросы Delphi 8 14.04.2010 12:44
Таймер. Конвертирование ms в часы,минуты, секунды.. ищу решения.. Человек_Борща Общие вопросы Delphi 3 08.04.2010 09:51