procedure TForm1.Button2Click(Sender: TObject);
var
  XmlHttp: Variant;
  datetxt: string;
  DateLst: TStringList;
  mon: string;
  timeGMT, GetNetTime: TDateTime;
begin
  XmlHttp := CreateOleObject('Microsoft.XMLHTTP');
  XmlHttp.Open('Get', 'http://www.baidu.com/', False);
  XmlHttp.send;
  datetxt := XmlHttp.getResponseHeader('Date');
  datetxt := Copy(datetxt, Pos(',', datetxt) + 1, 100);
  datetxt := StringReplace(datetxt, 'GMT', '', []);
  datetxt := Trim(datetxt);
  DateLst := TStringList.Create;
  while Pos(' ', datetxt) > 0 do
  begin
    DateLst.Add(Copy(datetxt, 1, Pos(' ', datetxt) - 1));
    datetxt := Copy(datetxt, Pos(' ', datetxt) + 1, 100);
  end;
  DateLst.Add(datetxt);
  if DateLst[1] = 'Jan' then
    mon := '01'
  else if DateLst[1] = 'Feb' then
    mon := '02'
  else if DateLst[1] = 'Mar' then
    mon := '03'
  else if DateLst[1] = 'Apr' then
    mon := '04'
  else if DateLst[1] = 'Mar' then
    mon := '05'
  else if DateLst[1] = 'Jun' then
    mon := '06'
  else if DateLst[1] = 'Jul' then
    mon := '07'
  else if DateLst[1] = 'Aug' then
    mon := '08'
  else if DateLst[1] = 'Sep' then
    mon := '09'
  else if DateLst[1] = 'Oct' then
    mon := '10'
  else if DateLst[1] = 'Nov' then
    mon := '11'
  else if DateLst[1] = 'Dec' then
    mon := '12';
  timeGMT := StrToDateTime(DateLst[2] + '-' + mon + '-' + DateLst[0] + ' ' + DateLst[3]);
  GetNetTime := IncHour(TimeGMT, 8);
  Label1.Caption := FormatDateTime('yyyy年mm月dd日 HH:NN:SS', GetNetTime);
end;
各位帮帮,我这么写编译运行时总是提示错误提示 “List index out of bounds (1)” 不知道是哪里错了啊。请各位大虾帮帮。感谢不尽~

解决方案 »

  1.   

    没看清楚 对不起. 你检查一下 DateLst在报错时Count是多少.应该是它越界了
      

  2.   

    多半是这句报错,你调试看下DateLst.count,然后检查下面的是否有效
    timeGMT := StrToDateTime(DateLst[2] + '-' + mon + '-' + DateLst[0] + ' ' + DateLst[3]);
      

  3.   


    Delphi(Pascal) code
    procedure TForm1.Button2Click(Sender: TObject);
    var
      XmlHttp: Variant;
      datetxt: string;
      DateLst: TStringList;
      mon: string;
      timeGMT, GetNetTime: TDateTime;
    begin
      //......
      DateLst.Add(datetxt);
      if DateLst.Count<2 then
         Label1.Caption := '获取时间失败!'
      else
      begin
        if DateLst[1] = 'Jan' then
          mon := '01'
        //......
        GetNetTime := IncHour(TimeGMT, 8);
        Label1.Caption := FormatDateTime('yyyy年mm月dd日 HH:NN:SS', GetNetTime);
      end;
    end;尝试将 'http://www.baidu.com/' 换成:
    'http://www.163.com/'

    'http://cn.yahoo.com/'
    试试。
    代码我测试通过。
      

  4.   

    [Quote=引用 4 楼 npkaida 的回复:]尝试将 'http://www.baidu.com/' 换成:
    'http://www.163.com/'

    'http://cn.yahoo.com/'
    试试。
    代码我测试通过。抱歉,换成什么都会出现“List index out of bounds (1)” 不是URL的问题。也不是服务器的问题。你换成其他的可以多试几次也同样报错。
      

  5.   

    我怀疑是你的网络原因,datetxt取了空值,导致后面报错。把while Pos(' ', datetxt) > 0 do
      begin
        DateLst.Add(Copy(datetxt, 1, Pos(' ', datetxt) - 1));
        datetxt := Copy(datetxt, Pos(' ', datetxt) + 1, 100);
      end;
      DateLst.Add(datetxt);
    改成:  
      DateLst.DelimitedText := datetxt;
      DateLst.Delimiter := ' ';
    再跟踪一下DateLst的内容
      

  6.   

    大哥你有更好的获取一个远程服务器时间的DEMO没啊?
      

  7.   

    远程服务器上开一个WebService,返回时间
    如果是数据库服务器且数据库服务端口允许开放,也可以直接取数据库时间
      

  8.   

    我想直接取一些公共URL的服务器时间,只需要服务器返回一个时间日期值既可了。
      

  9.   

    越界錯誤,設置一個斷點看一下:DateLst的值是多少???TStringList的用法... DateLst.DelimitedText := datetxt;
     DateLst.Delimiter := ' ';
      

  10.   

    代码没错,到服务器取时间不是每次都会成功的。你用 Windows 系统自身的 Internet 时间同步试试,
    也经常会失败。按我说的增加一行失败时的提示即可。
    代码我是经过测试的,没问题。