最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是C#的源码。
namespace
GMTPro
...
{ public partial class Form1 : Form ... { public Form1() ... { InitializeComponent(); } private DateTime GetGMTDateTime( int Value) ... { // GMT时间从1970年1月1日开始,先把它作为赋为初值 long Year = 1970 , Month = 1 , Day = 1 ; long Hour = 0 , Min = 0 , Sec = 0 ; // 临时变量 long iYear = 0 , iDay = 0 ; long 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; DateTime t = new DateTime(( int )Year, ( int )Month, ( int )Day,( int )Hour,( int )Min,( int )Sec); DateTime t1 = t.AddDays(iDay - RInt); return t1; } private void button1_Click( object sender, EventArgs e) ... { // 708992537为秒数 DateTime t1 = GetGMTDateTime( 708992537 ); textBox1.Text = t1.ToString( " yyyy-MM-dd " ); textBox2.Text = t1.ToString( " HH:mm:ss " ); } } }