将int变量格式化为mm:ss

时间:2012-02-07 10:58:40

标签: delphi time string-formatting

任何人都可以帮我解决如何将delphi中的int变量格式化为一分钟:秒??

样品: myVar:= 19;

我的标签标题应显示00:19

任何人都有意见吗?感谢

5 个答案:

答案 0 :(得分:13)

这将避免任何超过几小时的秒值的错误。

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;

答案 1 :(得分:8)

假设myVar包含秒数:

label1.Caption := Format('%.2d:%.2d', [myVar div 60, myVar mod 60]);

答案 2 :(得分:4)

你应该像这样使用FormatDateTime method

procedure TForm1.FormCreate(Sender: TObject);
const MyConst: Integer = 19;
begin
  Caption:=FormatDateTime('nn:ss', EncodeTime(0, MyConst div 60, MyConst mod 60, 0));
end;

答案 3 :(得分:2)

扩展到Brad的答案,我把它包装成一个功能,检测时间是否超过一小时,如果是,则自动显示小时数。否则,如果不到一小时,则不会显示小时数。它还有一个可选参数,用于定义是否在小时和分钟上显示前导零,具体取决于您的偏好(即03:06:32 vs 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

答案 4 :(得分:1)

如果您确定只需要几分钟和几秒钟 - 快速解决方案可能是:

格式('%d:%d',[(myVar div 60),(myVar mod 60)]);

与已提议的解决方案相同......: - )