var
  day:String;
  days:Integer;
begin
  try 
    day:='2012-12-21';
    days:=DaysInMonth(StrToDate(day));
  except
    showMessage('日期格式错误!');
end;
这段代码中·只是日期格式的差别·在一台机子上·执行不会报错·正常获取当月天数·另外一个机子上执行的时候·就会执行捕获异常的操作·
也就是·在另外一台机子执行编译的时候·要用day:='2012/12/21'才不会报错
这是什么问题?

解决方案 »

  1.   


    uses DateUtils;
    //-------------------------------
    procedure TForm11.btn1Click(Sender: TObject);
      procedure Test(const Value : string);
      var
        day : string;
        i : integer;
      begin
        day := '';
        for i := 1 to Length(Value) do
          if Value[i] in ['0'..'9'] then
            day := day + Value[i];    if Length(day) <> 8 then
        begin
          showMessage('输入日期' + Value + '无法识别!' + char(13) +
            '请检查日期格式: 只能识别4位数年份和2位数月/日, 年月日间可有1字符的分隔符!');
          exit;
        end;    day := Copy(day, 1, 4) + '-' + Copy(day, 5, 2) + '-' + Copy(day, 7, 2);
        SysUtils.DateSeparator := '-';  //設置全局變量    try
          ShowMessage('输入日期' + Value + ' 当月天数:' + inttostr(DaysInMonth(StrToDate(day))));
        except
          showMessage('日期格式错误!');
        end;
      end;begin
      Test('20121207');
      Test('2012/12/07');
      Test('2012 12 07');
      Test('2012-12-07');
      Test('2012-12-7');
      Test('2012-12-07 12:00:00');
    end;