Отформатируйте переменную int в мм: сс - PullRequest
5 голосов
/ 07 февраля 2012

Может кто-нибудь помочь мне, как отформатировать переменную int в Delphi в минуту: секунды ??

образец: myVar: = 19;

заголовок моей этикетки должен отображаться в 00:19

Есть идеи, кто-нибудь? спасибо

Ответы [ 5 ]

13 голосов
/ 07 февраля 2012

Это позволит избежать ошибок для значений секунд, которые переполняются в часы.

var
  secs: integer;
  str: string;
begin
  secs := 236;
  // SecsPerDay comes from the SysUtils unit.
  str := FormatDateTime('nn:ss', secs / SecsPerDay));

  // If you need hours, too, just add "hh:" to the formatting string
  secs := 32236;
  str := FormatDateTime('hh:nn:ss', secs / SecsPerDay));
end;
8 голосов
/ 07 февраля 2012

Предполагая, что myVar содержит количество секунд:

label1.Caption := Format('%.2d:%.2d', [myVar div 60, myVar mod 60]);
4 голосов
/ 07 февраля 2012

Вы должны использовать Метод FormatDateTime , например:

procedure TForm1.FormCreate(Sender: TObject);
const MyConst: Integer = 19;
begin
  Caption:=FormatDateTime('nn:ss', EncodeTime(0, MyConst div 60, MyConst mod 60, 0));
end;
2 голосов
/ 17 октября 2016

Расширяя ответ Брэда, я обернул его в функцию, которая определяет, если время больше часа, и автоматически показывает часы, если это так.В противном случае, если это меньше часа, он не показывает часы.Он также имеет необязательный параметр, определяющий, показывать ли ведущий ноль в часах и минутах, в зависимости от ваших предпочтений (например, 03:06:32 против 3:6:32).Это делает его немного более понятным для человека.

function SecsToTimeStr(const Secs: Integer; const LeadingZero: Boolean = False): String;
begin
  if Secs >= SecsPerHour then begin
    if LeadingZero then
      Result := FormatDateTime('hh:nn:ss', Secs / SecsPerDay)
    else
      Result := FormatDateTime('h:n:ss', Secs / SecsPerDay)
  end else begin
    if LeadingZero then
      Result := FormatDateTime('nn:ss', Secs / SecsPerDay)
    else
      Result := FormatDateTime('n:ss', Secs / SecsPerDay)
  end;
end;

Однако существует множество различных предпочтений при отображении периода времени, который решать вам.Я не буду описывать все эти возможные пути здесь.

enter image description here

1 голос
/ 07 февраля 2012

Если вы уверены, что вам нужны только минуты и секунды - быстрое решение может быть следующим:

Формат ('% d:% d', [(myVar div 60), (myVar mod 60)]);

То же решение, что и предлагалось ...: -)

...