You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中TDBEdit时间格式转换报错:无效时间格式'8::0 M'

问题分析与解决方案

报错原因

你遇到的invalid time format '8::0 M'错误,核心有两个问题:

  1. 输入文本格式异常:报错字符串8::0 M显示输入的时间存在格式错误——多了一个冒号,且AM/PM标识只输入了单个字母(应为完整的AM或PM),导致StrToTime无法识别。
  2. 默认解析不支持12小时制格式:Delphi的StrToTime默认依赖系统区域设置,如果你的系统是中文等非英文区域,默认不支持hh:mm am/pm这种带时段标识的12小时制格式,会直接解析失败。

修复代码

下面是调整后的代码,既解决格式解析问题,也增加了错误处理:

procedure TfrmActivity.edEndExit(Sender: TObject);
var
  s, e : TTime;
  FormatSettings: TFormatSettings;
begin
  // 初始化英文区域格式设置,明确指定12小时制解析规则
  FormatSettings := TFormatSettings.Create('en-US');
  FormatSettings.ShortTimeFormat := 'hh:mm tt'; // tt对应AM/PM标识

  try
    // 使用指定格式解析时间字符串
    s := StrToTime(edStart.Text, FormatSettings);
    e := StrToTime(edEnd.Text, FormatSettings);
    // 用IntToStr替代FloatToStr,因为MinutesBetween返回整数
    edTotTime.Text := IntToStr(MinutesBetween(e, s));
  except
    on E: EConvertError do
      ShowMessage('请输入正确的时间格式,例如:08:00 AM 或 02:30 PM');
  end;
end;

额外优化建议

  • 设置输入掩码:给edStart和edEnd的EditMask属性设置为!90:00 >LL;1;_,强制用户输入符合hh:mm AM/PM的格式,从源头避免输入错误。
  • 统一时段标识大小写:可以在解析前把输入文本转为大写(如UpperCase(edStart.Text)),避免因大小写不一致导致的解析失败。

内容的提问来源于stack exchange,提问作者K Boykin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:37:18