能力值:
( LV2,RANK:10 )
|
-
-
2 楼
是大家都解决不了,还是我问的有问题?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
CTime tm=CTime(t);//t为TimeDateStamp的数值
CString str;
sstr=tm.Format("%Y,%m,%d,%H,%M,%S");
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
三楼的可不可以给详细说下,我说的是怎么样能把0x2A425E19转换成Fri Jun 19 22:22:17 1992 这样的。
或者是逆向也行啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
换算成秒、或者飞秒吧。然后计算机有个最小时间的,2个加起来就是现在的时间。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
时间戳是从1970年1月1日开始的以秒位单位计算的
而Windows下FILETIME是从1601年1月1日开始以纳秒计算的
可以先将时间戳转化为FILETIME 再用API转换为常见格式
下面是代码,详情见注释
#include <stdio.h>
#include <windows.h>
int main()
{
FILETIME ft = {0};
SYSTEMTIME st = {0};
DWORD64 qwOffset;
//将以秒为单位的时间戳0x2A425E19转化为纳秒,以便计算FILETIME
DWORD64 qwTarget = (DWORD64)0x2A425E19 * (DWORD64)10000000;
//时间戳是以1970年1月1日开始的以秒为单位的偏移
//这里算出1601年1月1日起
//到1970年1月1日以纳秒为单位的FILETIME
st.wYear = 1970;
st.wMonth = 1;
st.wDay = 1;
SystemTimeToFileTime(&st, &ft);
qwOffset = ft.dwHighDateTime;
qwOffset = qwOffset << 32;
qwOffset += ft.dwLowDateTime;
//算出时间戳的FILETIME
//即1970年1月1日的FILETIME加上换算成纳秒的时间戳
qwTarget += qwOffset;
//转化为可读的系统时间,SYSTEMTIME中包含所需信息
ft.dwLowDateTime = (DWORD)(qwTarget & 0xFFFFFFFF);
ft.dwHighDateTime = (DWORD)((qwTarget >> 32) & 0xFFFFFFFF);
FileTimeToSystemTime(&ft, &st);
return 0;
}
参考http://www.fish888.com/-t170814
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
nifgod谢谢了,说的太详细了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
客气,还是临时会员
苦恼求分买码
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
也学习了!长路漫漫啊
|
能力值:
( LV3,RANK:30 )
|
-
-
10 楼
时间戳是从1970年1月1日开始的以秒位单位计算的
而Windows下FILETIME是从1601年1月1日开始以纳秒计算的
|
|
|