这是原来的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
T:Int64;
D:TDateTime;
begin
T:=1167627540218;
// T:=1167640359140;
D:=UnixToDateTime(T div 1000);
D:=D+8/24; //时间戳是格林威治时间,转换到中国+8区
ShowMessage(DateTimeToStr(D));
end; 我朋友翻译成C的了
string UnixToDateTime(INT64 iMinSecond)
{
int iSecond = iMinSecond/1000;
int iYear = iSecond/(365*24*3600);
iSecond -=iYear*(365*24*3600);
int iMonth = iSecond/(30*24*3600);
iSecond -=iMonth*(30*24*3600);
int iDay = iSecond/(24*3600);
iSecond -=iDay*(24*3600);
int iHour = iSecond/3600;
iSecond -=iHour*(3600);
int iMin = iSecond/60;
iSecond -=iMin*(60); char sDay[64] ={0};
sprintf(sDay,"%04d/%02d/%02d %02d:%02d:%02d",iYear+1970,iMonth+1,iDay+1,iHour,iMin,iSecond);
return sDay;
} 但是最后的结果不一样哦。
有没有兄弟可以帮忙检查下。
procedure TForm1.Button1Click(Sender: TObject);
var
T:Int64;
D:TDateTime;
begin
T:=1167627540218;
// T:=1167640359140;
D:=UnixToDateTime(T div 1000);
D:=D+8/24; //时间戳是格林威治时间,转换到中国+8区
ShowMessage(DateTimeToStr(D));
end; 我朋友翻译成C的了
string UnixToDateTime(INT64 iMinSecond)
{
int iSecond = iMinSecond/1000;
int iYear = iSecond/(365*24*3600);
iSecond -=iYear*(365*24*3600);
int iMonth = iSecond/(30*24*3600);
iSecond -=iMonth*(30*24*3600);
int iDay = iSecond/(24*3600);
iSecond -=iDay*(24*3600);
int iHour = iSecond/3600;
iSecond -=iHour*(3600);
int iMin = iSecond/60;
iSecond -=iMin*(60); char sDay[64] ={0};
sprintf(sDay,"%04d/%02d/%02d %02d:%02d:%02d",iYear+1970,iMonth+1,iDay+1,iHour,iMin,iSecond);
return sDay;
} 但是最后的结果不一样哦。
有没有兄弟可以帮忙检查下。
UnixToDateTime 函数;*转换Unix或Linux日期、时间值为Delphi日期时间值 1970/1/1為起點
UnixToDateTime 函数;*转换Unix或Linux日期、时间值为Delphi日期时间值 1970/1/1為起點我知道VC里面有个函数差不多。
可是我就是想学习下。 看高手门翻译的代码。。 要纯C的
2,然后计算各个区时秒数差值(时区数*3600)。
3,再把秒数转换成年月日。
代码不在手头,不然就贴给你。