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;
    

  • 相关阅读:
    Well, that was fun! An adventure in WCF, SSL, and Host Headers (转)
    算法还重要吗?
    Silverlight测试——利用Ranorex实现数据驱动测试
    MSSQl分布式查询
    Silverlight 4 CHM中文离线文档已提供下载
    快速打包你的应用程序——Inno Setup
    IE 9 Beta 测试Bug
    IE 9 Bate 泄露版
    Windows PowerShell初体验——.NET对象支持
    多样化实现Windows Phone 7本地数据库访问<2>
  • 原文地址:https://www.cnblogs.com/karkash/p/3380148.html
Copyright © 2011-2022 走看看