最近在写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;