本文主要是介绍随便找个网站获取格林威治时间, 并转换到北京时间,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
随便找个网站获取格林威治时间, 并转换到北京时间
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;
posted on
2013-08-17 01:02
万一
阅读(5353)
评论(1)
编辑
收藏
这篇关于随便找个网站获取格林威治时间, 并转换到北京时间的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!