如何做一个倒计时程序

haohaokingXP 2006-09-14 09:42:40
我帮同学做一个倒计时程序,计算距北京2008年奥运会时间,程序部分代码贴出
我首先获取系统时间,在转化成文件时间,也就说是用2008年8月8号8时转化成文件时间,在转化ULARGE_INTEGER 类型 变量名ui_target,在将现在时间转化成文件时间,在转换成ULARGE_INTEGER 类型 变量名 ui_now 用ui_target 减去 ui_now 得到ui_result在转化成文件时间,在转化成系统时间,但是结果都是很大数,不正确,高手和大侠帮我解决

void DrawLastingTime(HDC hdc)
{
SYSTEMTIME st={0};
char time[100];
SYSTEMTIME sys_now={0};
SYSTEMTIME sys_target={0};

FILETIME now={0};
FILETIME target={0};

FILETIME now1={0};
FILETIME target1={0};

ULARGE_INTEGER ui_now;
ULARGE_INTEGER ui_target;


sys_target.wYear = 2008;
sys_target.wMonth = 8;
sys_target.wDay = 8;
sys_target.wHour = 8;
sys_target.wMinute = 0;

GetLocalTime(&sys_now); //获取当前系统时间

SystemTimeToFileTime(&sys_now,&now); //转化成文件时间
SystemTimeToFileTime(&sys_target,&target);//转换成文件时间



memcpy(&ui_now,&now,sizeof(now));//转换成ULARGE_INTEGER
memcpy(&ui_target,&target, sizeof(target));

// ui_now.LowPart = now1.dwLowDateTime;
// ui_now.HighPart = now1.dwHighDateTime;
//ui_target.LowPart = target1.dwLowDateTime;
//ui_target.HighPart = target1.dwHighDateTime;

ULARGE_INTEGER result ;

result.LowPart = ui_target.LowPart - ui_now.LowPart; //得到结果
result.HighPart = ui_target.HighPart - ui_now.LowPart;

//求文件时间
FILETIME ft_result={0};
ft_result.dwLowDateTime = result.LowPart;
ft_result.dwHighDateTime = result.HighPart;
SYSTEMTIME sys_result={0};
FileTimeToSystemTime(&ft_result,&sys_result);//转换成系统时间

sprintf(time,"距2008年奥运会还剩—%d年%d月%d日%d小时",sys_result.wYear,sys_result.wMonth,sys_result.wDay,sys_result.wHour);
SetTextColor(hdc,RGB(0,0,200));
TextOut(hdc,300,0,time,strlen(time));


}
...全文
534 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mzjwx 2006-09-14
  • 打赏
  • 举报
回复
使用CTime类啊!具体代码如下:

void CDTimeDlg::OnDaojishi()
{
CTimeSpan time;
CTime day1(2008,8,8,0,0,0);
day2=m_time.GetCurrentTime();
time=day1-day2;
m_xs=time.Format("%D-%H-%M-%S");
UpdateData(false);
}
m_xs是一个Edit box变量名
haohaokingXP 2006-09-14
  • 打赏
  • 举报
回复
晕,大哥阿,谁会拿结构减阿!
SYSTEMTIEM结构里数据是WORD型的,怎么减阿,一个拿小的减大的得正值
believefym 2006-09-14
  • 打赏
  • 举报
回复
又没让你用结构来减,结构的成员相减啊
haohaokingXP 2006-09-14
  • 打赏
  • 举报
回复
我以前就是相减不可以
微软提示不能用SYSTIME 结构向减阿
除除取整,详细说说
believefym 2006-09-14
  • 打赏
  • 举报
回复
不用转换,直接减减,除除取整就有了
lixiaosan 2006-09-14
  • 打赏
  • 举报
回复

//求文件时间
FILETIME ft_result={0};
memcpy(&ft_result, &result ,sizeof(result));
SYSTEMTIME sys_result={0};
FileTimeToSystemTime(&ft_result,&sys_result);//转换成系统时间

最后要注意SYSTEMTIME结构体中的wYear是从1601开始计算的。。所以最后得到的sys_result中
的wYear还要减去1601
lixiaosan 2006-09-14
  • 打赏
  • 举报
回复
result.LowPart = ui_target.LowPart - ui_now.LowPart; //得到结果
result.HighPart = ui_target.HighPart - ui_now.LowPart;
===>
result.QuadPart = ui_target.QuadPart - ui_now.QuadPart;
lixiaosan 2006-09-14
  • 打赏
  • 举报
回复
http://blog.csdn.net/lixiaosan/archive/2006/09/14/1222261.aspx

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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