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;
    

  • 相关阅读:
    关闭windows10更新
    ude5.00修改字体大小方法
    hightec的eclipse运行错误解决
    Tek DPO2024B示波器和电流探头A622的使用
    vue项目中使用mockjs+axios模拟后台数据返回
    vue-tree 组织架构图/树形图自动生成(含添加、删除、修改)
    vue html页面打印功能vue-print
    项目中遇到的bug、问题总结
    在Vue项目中使用html2canvas生成页面截图并上传
    element-ui 使用span-method表格合并后hover样式的处理
  • 原文地址:https://www.cnblogs.com/karkash/p/3380148.html
Copyright © 2011-2022 走看看