鱼C论坛

 找回密码
 立即注册

将TimeDateStamp字段值为日期时间格式

热度 19已有 5087 次阅读2011-4-1 17:45 |个人分类: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;

1

路过

鸡蛋
10

鲜花
2

握手
2

雷人

刚表态过的朋友 (15 人)

发表评论 评论 (5 个评论)

回复 IQpower 2012-2-23 21:49
月份呢?
回复 thinksmile1992 2015-10-13 21:48
Delphi7的基本数据类型不见了
回复 gxlclj 2016-5-19 05:47
Delphi7的基本数据类型   在视频教学里面提到的 这里找不到
回复 qysam 2016-12-7 15:24
Delphi7的基本数据类型   在视频教学里面提到的 这里找不到
回复 生命中的过客 2021-6-17 20:02
Delphi7的基本数据类型   在视频教学里面提到的 这里找不到

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 19:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部