办公室里一台机器的区域和语言选项是“中文(台湾)”,在这台机器上用下面语句可以把字符串变成时间:
d:=StrToDate('2005/7/23');
但是另一台机器的区域和语言选项是“英文(美国)”,程序运行到上面的语句就报错了。我想达到的目的是不管机器的区域和语言选项是什么,都要把'2005/7/23'这种格式的字符串变成时间。看了一下Delphi的帮助文件StrToDate函数还有一个TFormatSettings类型的参数,估计用它应该可以达到目的,但找了半天也没找到使用TFormatSettings的例子,小弟希望得到各位的帮助。

解决方案 »

  1.   

    http://www.hh-century.com/delphi_free/article.asp?id=17
      

  2.   

    http://delphi.ktop.com.tw/TOPIC.ASP?TOPIC_ID=50073
      

  3.   

    参考如下代码:
    function MyStrToDate(S: string): TDateTime;
    var
      ys, ms, ds: string;
      yw, mw, dw: Word;
      i: Integer;
    begin
      Result := 0;
      if S = '' then Exit;
      i := Pos('/', S);
      ys := Copy(S, 1, i - 1);
      S := Copy(S, i + 1, length(S));
      i := Pos('/', S);
      ms := Copy(S, 1, i - 1);
      S := Copy(S, i + 1, length(S));
      ds := S;
      try
        yw := StrToInt(ys);
        mw := StrToInt(ms);
        dw := StrToInt(ds);
        Result := EncodeDate(yw, mw, dw);
      except
        Result := 0;
      end;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s,s1 :string;
      slst : TStringList;
      i: integer;
      y,m,d:word;
    begin
      s:='2005/5/6';
      slst := TStringList.Create;
      ExtractStrings(['/'],[' '],pchar(s),slst);  y:=strtoint(slst[0]);
      m:=strtoint(slst[1]);
      d:=strtoint(slst[2]);
      showmessage(datetostr(EncodeDate(y,m,d)));end;
      

  5.   

    DateSeparator := '/';  //你使用的分隔符
    ShortDateFormat := 'yyyy/mm/dd';  //输出格式  这里的‘/’如果改成‘-’,下面showmessage就变成‘-’
    Date := StrToDate('2005/02/01');  //转换
    ShowMessage(DateToStr(Date));  看到'2005/02/01'你自己试试,不然不保险,实际上就是DateSeparator不同系统可能不一样
      

  6.   

    如果你不需要控制显示格式ShortDateFormat可以不用设置,关键在DateSeparator
      

  7.   

    谢谢大家
    另外想问一下,TStringList类型的变量不过不free会不会自动free?
    看见 qizhanfeng(glacier)的帖子里用到了TStringList,突然想到了这个问题。