zoukankan      html  css  js  c++  java
  • 随便找个网站获取格林威治时间, 并转换到北京时间


    uses Winapi.msxml, System.DateUtils;
    
    //实时获取网络时间的函数, 得到的是格林威治时间; 默认从 sohu 服务器获取, 因为它最快, 平均只需 15 毫秒
    function GetNetTime(aUrl: WideString = 'http://www.sohu.com'): string;
    begin
      with CoXMLHTTP.Create do
      begin
        open('Post', aUrl, False, EmptyParam, EmptyParam);
        send(EmptyParam);
        Result := getResponseHeader('Date');
      end;
    end;
    
    //格林威治时间(字符串)转换到北京时间
    function GMT2BjDateTime(const GMT: string): TDateTime;
    var
      A: TArray<string>;
    begin
      A := GMT.Split([',', ' '], ExcludeEmpty); //XE4 支持
    
      with TStringList.Create do begin
        CommaText := 'Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12';
        A[2] := Values[A[2]];
        Free;
      end;
    
      Result := StrToDateTime(Format('%s/%s/%s %s', [A[3], A[2], A[1], A[4]]), FormatSettings.Create(2052));
      Result := Result + 8/24; //换算成北京时间
    end;
    
    //测试
    procedure TForm1.Button1Click(Sender: TObject);
    var
      strGMT: string;
      bjDateTime: TDateTime;
    begin
      strGMT := GetNetTime();
      bjDateTime := GMT2BjDateTime(strGMT);
    
      ShowMessageFmt('%s'#13#10'%s', [strGMT, DateTimeToStr(bjDateTime)]);
    end;
    


    在真正实用中, 我把 GMT2BjDateTime 函数换成了:

    function GMT2BjDateTime(const GMT: string): TDateTime;
    var
      A: TArray<string>;
      Y,M,D,H,N,S: Word;
    begin
      A := GMT.Split([',', ' ', ':'], ExcludeEmpty);
    
      with TStringList.Create do begin
        CommaText := 'Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12';
        A[2] := Values[A[2]];
        Free;
      end;
    
      Y := StrToIntDef(A[3], YearOf(Now));
      M := StrToIntDef(A[2], MonthOf(Now));
      D := StrToIntDef(A[1], DayOf(Now));
      H := StrToIntDef(A[4], HourOf(Now));
      N := StrToIntDef(A[5], MinuteOf(Now));
      S := StrToIntDef(A[6], SecondOf(Now));
    
      Result := EncodeDateTime(Y, M , D, H, N, S, 0);
      Result := Result + 8/24; //换算成北京时间
    end;
    

  • 相关阅读:
    组合模式
    C#+ArcEngine中com对象的释放问题
    备忘录模式
    C#中的DataSet添加DataTable问题
    jenkins从节点
    jenkins Publish over SSH
    jenkins凭据
    jenkins maven项目
    jenkins部署-docker
    zabbix api
  • 原文地址:https://www.cnblogs.com/del/p/3263774.html
Copyright © 2011-2022 走看看