我自定义了下面三个函数
//判断字符串是否是有效日期类型
function isdate(s: string): boolean;
var
      d:TDateTime;
  begin
      try
          d:=StrToDate(s);
          Result:=true;
      except
          Result:=false;
      end;end;//检测是否是4位年份function is4year(s: string): boolean;
begin
  result := false;
  if length(s) < 4 then exit;
  try
    strtoint(copy(s, 1, 4));
    result := true;
  except
    on EConvertError do
      result := false;
  end;
end;
//**********************************************************************
//日期检测处理,Edit组件输入是否为有效日期,日期的年份是否为4位
//ed1:被检测TlabeledEdit类型组件
//**********************************************************************
function EditIsYear(ed1:Tedit): boolean;
begin
  result := false;
  if isdate(ed1.Text) = false then
  begin
    MessageDlg('日期输入不正确!', mtWarning, [mbOk], 0);
    ed1.SetFocus;
    result := false;
    exit;
  end;
  if is4year(ed1.Text) = false then
  begin
    MessageDlg('年份必须输入4位!格式为XXXX-XX-XX(年—月—日)!', mtWarning, [mbOk], 0);
    ed1.SetFocus;
    result := false;
  end;
end;
然后在edit1的change的事件里这么写的
 if  EditIsYear(edit1)=false then exit;
然后出现如下错误:
"19" is not a vaild date,请问我应该如何处理这个问题????

解决方案 »

  1.   

    change事件里加上判断!!if length(trim(edit1.text)) = 10 then
      if editisyear.....
      

  2.   

    为什么使用Edit?使用DateTimePicker不好吗?起码使用DateTimePicker不用考虑用户输入的是不是非法日期的问题。
      

  3.   

    还有dateutils单元里,本来就有IsValidDate,没必要再写一个
      

  4.   

    判断某个字符串是不是日期用TryStrToDate也可以啊
      

  5.   

    有现成的控件为什么不用呢?datetimepicker!
      

  6.   

    使用datetimepicker带来的问题就是不能使日期为选填字段
    建议使用MaskEdit,格式化为YYYY-MM-DD
    验证日期是否有效可以在OnExit事件里判断
    try
      strtodate(MaskEdit.text);
    except
      showmessage('日期格式不正确');
      maskedit.clear;
      maskedit.setfocus;
    end;
      

  7.   

    用RzDateTimeEdit就能达到楼上说的效果了
      

  8.   

    Tools->Debugger Options->Language Exceptions  加入你需要在Debug时忽略的异常类型(例如:EDataBaseError、EStringListError 等.)将屏蔽在调试时的异常信息。
      

  9.   

     有现在的VCL不用,没有必要再写一个。
      

  10.   

    delphi有好多日期函数可以用的。