1秒钟时间差转换为FILETIME,相减所得的时间戳引发的问题

我看你有戏 2013-06-08 09:32:26

#include "stdafx.h"
#include "stdio.h"
#include <iostream>

#include "windows.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
FILETIME f1,f2;
SYSTEMTIME SystemTime;
GetSystemTime(&SystemTime);
SystemTime.wSecond+=1;
SystemTimeToFileTime(&SystemTime,&f1);


SystemTime.wSecond+=2;
SystemTimeToFileTime(&SystemTime,&f2);


UINT64 i641 =(UINT64)f1.dwHighDateTime*((UINT64)0xFFFFFFFF+1) + f1.dwLowDateTime;
UINT64 i64a = *(UINT64*)(&f1);

UINT64 i642 =(UINT64)f2.dwHighDateTime*((UINT64)0xFFFFFFFF+1) + f2.dwLowDateTime;
UINT64 i64b = *(UINT64*)(&f2);

printf("%I64d",i642-i641);

system("pause");


return 0;
}

打印结果
20000000

感觉不对,相差1秒钟,打印的结果应该是 10亿除以100 啊,为啥是20000000


功能
FILETIME结构持有的64位无符号的文件的日期和时间值。
此值表示自1601年1月1日开始的100纳秒为单位的时间。

编辑本段语法
typedef struct _FILETIME {
DWORD dwLowDateTime; /* 低 32 位 */
DWORD dwHighDateTime; /* 高 32 位 */
} FILETIME, *PFILETIME, *LPFILETIME;
编辑本段成员
dwLowDateTime
低位32位的文件的时间值。
dwHighDateTime
高位32位的文件的时间值。
编辑本段要求
头文件: WINDEF.H[1]


1纳秒=1000皮秒 
1纳秒 =0.001 微秒
1纳秒=0.000 001毫秒  
1纳秒=0.000 000 001秒




虚回复,不给分
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-06-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <windows.h>
int main() {
    FILETIME f1,f2;
    SYSTEMTIME SystemTime;
    GetSystemTime(&SystemTime);
    SystemTime.wSecond+=1;
    SystemTimeToFileTime(&SystemTime,&f1);

    SystemTime.wSecond+=1;
    SystemTimeToFileTime(&SystemTime,&f2);

    UINT64 i641 =(UINT64)f1.dwHighDateTime*(0xFFFFFFFFui64+1ui64) + (UINT64)f1.dwLowDateTime;
    UINT64 i64a = *((UINT64*)(&f1));

    UINT64 i642 =(UINT64)f2.dwHighDateTime*(0xFFFFFFFFui64+1ui64) + (UINT64)f2.dwLowDateTime;
    UINT64 i64b = *((UINT64*)(&f2));

    printf("%I64d\n",i642-i641);
    printf("%I64d\n",i64b-i64a);
    return 0;
} 
//10000000
//10000000
//
我看你有戏 2013-06-08
  • 打赏
  • 举报
回复
晕,丢人了,自己找到问题了,哈哈
我看你有戏 2013-06-08
  • 打赏
  • 举报
回复

根据定义这样算出来,应该是刚刚好1秒啊,为啥是2呢
printf("%I64d",(i642-i641)*100 / 1000000000 );
赵4老师 2013-06-08
  • 打赏
  • 举报
回复
希望你看了我的代码能明白:常量也有类型。
我看你有戏 2013-06-08
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
#include <stdio.h>
#include <windows.h>
int main() {
    FILETIME f1,f2;
    SYSTEMTIME SystemTime;
    GetSystemTime(&SystemTime);
    SystemTime.wSecond+=1;
    SystemTimeToFileTime(&SystemTime,&f1);

    SystemTime.wSecond+=1;
    SystemTimeToFileTime(&SystemTime,&f2);

    UINT64 i641 =(UINT64)f1.dwHighDateTime*(0xFFFFFFFFui64+1ui64) + (UINT64)f1.dwLowDateTime;
    UINT64 i64a = *((UINT64*)(&f1));

    UINT64 i642 =(UINT64)f2.dwHighDateTime*(0xFFFFFFFFui64+1ui64) + (UINT64)f2.dwLowDateTime;
    UINT64 i64b = *((UINT64*)(&f2));

    printf("%I64d\n",i642-i641);
    printf("%I64d\n",i64b-i64a);
    return 0;
} 
//10000000
//10000000
//
大哥你来晚了,哈哈,我结贴了哦

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧