文档章节

随便找个网站获取格林威治时间, 并转换到北京时间

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 345
阅读 15
收藏 0

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;

本文转载自:http://www.cnblogs.com/del/p/3263774.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
C 获取当前日期时间并转换UNIX时间戳

获取当前日期时间并转换UNIX时间戳,废话就不多讲了,直接上代码,代码也比较简单,只是起到一个记录的作用,所以代码中就不带注释了. #include <stdio.h> / puts / include <time.h> / time_t, ...

bobwei
2016/03/11
1K
0
教你动态添加EditText并获取内容, 让项目经理大满足?!

前言 当你拿着测试app给项目经理, 项目经理总会提一些奇怪的要求. 比如说, 不想手动输入路径, 你去加个像windows文件管理器那样点击的.然后一顿忙碌后, 拿着新的测试app给项目经理, 经理觉得...

sorrower
2018/01/02
0
0
Python爬虫,用第三方库解决下载网页中文本的问题

还在辛辛苦苦的查找网页规律,写正则或者其他方式去匹配文本内容吗?还在纠结怎么去除小说网站的其他字符吗? 先来看看下面2张图,都是某小说网站的小说内容 怎么样,是不是很简洁!这就是今...

python玩家
2018/06/26
0
0
微信企业号登录授权Java实现获取员工userid根据userid换openid

微信企业号登录授权Java实现获取员工userid根据userid换openid 2016年1月8日 为了方便测试 。debug 建议大家搞个花生壳或者其他的可以映射公网IP的软件。 貌似涨价了8元一个。鄙人捡了个便宜...

小帅帅丶
2015/08/26
0
1
导入excel数据问题 poi

使用poi将excel导入 并转换为实体类 ,并将实体类插入到数据库中,现在当有部分对象导入不进去时,造成整个实体集合导不进去 我如何 将不能导入的实体集合都获取到 并返回到前台显示 ,前台选...

开源中国技术顾问
2015/08/26
190
3

没有更多内容

加载失败,请刷新页面

加载更多

关于php的xdebug配置(编辑器vscode)

虽然说echo和print_r是公认的最实用的调试工具,但是效率真的没有可视化的直接断点那么高。这里简单介绍如果安装及配置xdebug for vscode 一、PHP环境处的配置 1、编译安装 下载及编译php,因...

元谷
8分钟前
0
0
heartbeat

kaer@linux-sqlf:~/Reusable-Cluster-Components-glue--0a7add1d9996> ./configure --enable-doc=no --prefix=/usr/local/heartbeat kaer@linux-sqlf:~/Heartbeat-3-0-958e11be8686> ./confi......

李有常
18分钟前
0
0
shell 脚本 title 免写入

1、有时候写脚本,需要写一些注释信息或者备注之类,当每次都手写比较麻烦,可以写一个脚本,每次运行则自动写入这些信息,不需要在手动输入; 通过 EOF 嵌入文档的方式; [root@localhost_002 sh...

芬野de博客
25分钟前
0
0
FragmentPagerAdapter+ViewPager 更新问题

场景 存在一种需求,当用户系统中,属于某一组织的用户登录之后(或者账户切换),要求主页面显示不同的ViewPager + Fragment组合,并且要求app无需退出就能刷新组合以及组合中的页面。 此外...

IamOkay
25分钟前
1
0
Python有哪些常用的标准库?Python基础教程,第十一讲,常用标准库(一)

上一节课我们学习了如何自定义模块,大家可以定义自己的模块,但是项目中通常不允许我们自己造轮子,所以本节课主要学习Python的标准库,学习使用别人的轮子,由于标准库内容较多,所以我们分...

程序员补给栈
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部