转换GMT秒数为日期时间格式-Delphi源码

转换GMT秒数为日期时间格式-Delphi源码。收藏

最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是Delphi的源码。

//把GMT时间的秒数转换成日期时间格式

function GetGMTDateTime(Value:Int64):TDateTime;

var

Year,Month,Day:Word;

Hour,Min,Sec,MSec:Word;

iYear,iDay:Word;

iHour,iMin,iSec:Word;

RInt,i:Integer;

TempDate,TempTime:TDateTime;

begin

//GMT是从1970年1月1日开始计算的,所以把它作为初值

Year:=1970; Month:=1; Day:=1;

Hour:=0; Min:=0; Sec:=0; MSec:=0;

//计算文件创建的年份

iYear:=Value div (365*24*60*60);

Year:=Year+iYear;

//计算文件除创建整年份以外还有多少天

iDay:=(Value mod (365*24*60*60)) div (24*60*60);

//把闰年的年份数计算出来

RInt:=0;

for i:=1970 to Year-1 do

begin

if (i mod 4)=0 then

RInt:=RInt+1;

end;

//计算文件创建的时间(几时)

iHour:=((Value mod (365*24*60*60)) mod (24*60*60)) div (60*60);

Hour:=Hour+iHour;

//计算文件创建的时间(几分)

iMin:=(((Value mod (365*24*60*60)) mod (24*60*60)) mod (60*60)) div 60;

Min:=Min+iMin;

//计算文件创建的时间(几秒)

iSec:=(((Value mod (365*24*60*60)) mod (24*60*60)) mod (60*60)) mod 60;

Sec:=Sec+iSec;

//合并日期和时间

TempDate:=EncodeDate(Year,Month,Day);

TempTime:=EncodeTime(Hour,Min,Sec,MSec);

//由于闰年的二月份有29天,闰年年份一年有366年天,而平年一年有365天,上面

//是用365计算的,所以要减去闰年年份多出来的一天

//最后返回值合并日期和时间到TDateTime类型中

Result:=(TempDate+iDay-RInt)+TempTime;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Temp:TDateTime;

begin

//708992537为秒数

Temp:=GetGMTDateTime(708992537);

//取出日期

Edit1.Text:=DateToStr(Temp);

//取出时间

Edit2.Text:=TimeToStr(Temp);

end;