哈哈,没想到我最近写的几个破过程还很有用:
//将以Separate区分的字符串转化为日期变量
  function MyStrtoDate(Str: String;Separate:Char): TDate;
  Var
    DStr0,DStr1,DStr:String;
    Mon,Dat,Yea,md_Tem:Word;
  begin    DStr:=Str;
    Dstr0:='';
    Try
      Try
        While(DStr0='')And(Dstr<>'') Do
        Begin
          SubfromStr(DStr,Separate,DStr0,DStr1);
          DStr:=DStr1;
        End;
        If DStr0<>'' Then
           Mon:=StrtoInt(DStr0);
        Dstr0:='';
        While(DStr0='')And(Dstr<>'') Do
        Begin
          SubfromStr(DStr,Separate,DStr0,DStr1);
          DStr:=DStr1;
        End;
        If DStr0<>'' Then
           Dat:=StrtoInt(DStr0);
        Dstr0:='';
        While(DStr0='')And(Dstr<>'') Do
        Begin
          SubfromStr(DStr,Separate,DStr0,DStr1);
          DStr:=DStr1;
        End;
        If DStr0<>'' Then
        Begin
          Yea:=StrtoInt(DStr0);
          If Yea<100 Then
          Begin
            If Yea>50 then
               Yea:=1900+Yea
            Else
               Yea:=2000+Yea;
          End;
        End;
        If Mon>12 Then
          If Dat<12 Then
          Begin
            MD_Tem:=Mon;
            Mon:=Dat;
            Dat:=MD_Tem;
          End;
      Except
        DecodeDate(Date,Yea,Mon,Dat);
//        MessageDlg('日期转换错误,将用当前日期替换',mtError,[mbOK],0);
      End;
    Finally
      result:=EncodeDate(Yea,Mon,Dat);
 //     Showmessage(DateToStr(Result));
    End;
  end;其中SubfromStr子过程如下;
  Procedure SubfromStr(Const Str_T:String;Delimiter:Char;Var Str0,Str1:String);
  Var
     Str:String;
     Str_Pos1,Str_Pos2:Integer;
     Str_Start,Str_num,Str_pos:Integer;
  begin
     str:=trim(Str_t);
     Str_pos:=Pos(Delimiter,Str);     if(Str_Pos=0)then
     begin
        Str0:=Str;
        Str1:='';
     end
     Else
     begin
        Str_Start:=1;
        Str_Num:=Str_Pos-1;
        Str0:=copy(str,Str_Start,Str_Num);
        Str_Start:=Str_Num+2;
        Str1:=Copy(Str,Str_Start,length(Str));
     end;
  end;

解决方案 »

  1.   

    是这个地方,就是用delphi将相对于的时间转化成年月日格式
      

  2.   

    需要注明的是,我上面的程序转换的时间格式是:06/29/02,或者是06/29/2002,也就是月/日/年的格式,你可以稍作修改就能达到你的目的。我里面虽然也有判断月日是否搞混的,但并不是很完整。
    程序的结果是完全有效的。
    FormatDateTime并不能转换这种字符串形式的时间,所以你首先必须将其按一个字符串读入,然后,按我的程序进行转换,没有任何问题。
      

  3.   

    如果取舍到日的话就很简单了:
      s:='1970/1/1/0:00';
      DateSeparator := '/';
      ShortDateFormat := 'yyyy/m/d/';//1970/1/1/0:00
      StrtoDate(Copy(S,1,8));
      

  4.   

    “如果取舍到日的话就很简单了:
      s:='1970/1/1/0:00';
      DateSeparator := '/';
      ShortDateFormat := 'yyyy/m/d/';//1970/1/1/0:00
      StrtoDate(Copy(S,1,8));”
    哈哈,我知道我的程序原来为什么不行的原因了:
      我的源代码是  s:='1970/1/1/0:00';
      DateSeparator := '/';
      StrtoDate(Copy(S,1,8));丢了中间的一行。
    谢谢 9527(?????)