最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是VC++的源码。
//
把GMT时间的秒数转换成日期时间格式
CTime GetGMTDateTime(
long
Value)
...
{ //GMT时间从1970年1月1日开始,先把它作为赋为初值 int Year=1970, Month=1, Day=1; int Hour=0, Min=0, Sec=0, MSec=0; //临时变量 int iYear=0, iDay=0; int iHour=0, iMin=0, iSec=0; //计算文件创建的年份 iYear=Value / (365*24*60*60); Year=Year+iYear; //计算文件除创建整年份以外还有多少天 iDay=(Value % (365*24*60*60)) / (24*60*60); //把闰年的年份数计算出来 int RInt=0; for(int i=1970;i<Year;i++) ...{ if((i % 4)==0) RInt=RInt+1; } //计算文件创建的时间(几时) iHour=((Value % (365*24*60*60)) % (24*60*60)) / (60*60); Hour=Hour+iHour; //计算文件创建的时间(几分) iMin=(((Value % (365*24*60*60)) % (24*60*60)) % (60*60)) / 60; Min=Min+iMin; //计算文件创建的时间(几秒) iSec=(((Value % (365*24*60*60)) % (24*60*60)) % (60*60)) % 60; Sec=Sec+iSec; CTime t(Year,Month,Day,Hour,Min,Sec); CTime t1; t1=t+(iDay-RInt)*24*60*60; return t1;}
//
调用
void
CGMTProDlg::OnOK()
...
{ CTime t1; //708992537为秒数 t1=GetGMTDateTime(708992537); char RDate[20]=...{0}; char RTime[20]=...{0}; //分离出日期 wsprintf(RDate,"u-u-u",t1.GetYear(),t1.GetMonth(),t1.GetDay()); //分离出时间 wsprintf(RTime,"u:u:u",t1.GetHour(),t1.GetMinute(),t1.GetSecond()); //把日期和时间显示出来 m_Date=RDate; m_Time=RTime; UpdateData(FALSE);}
转载请注明原文地址: https://ibbs.8miu.com/read-8805.html