註:
代碼需要在VC或Dev-C++下編譯,因為TurboC中的time.h太老舊,不包括mktime等函數。
另外,如果覺得窗口有點閃動,可以在while循環尾部加上Sleep(500);這壹句,不過需要包含windows.h頭文件。
目標時間方面,tm_year指從1900年開始的年份,因此107指2007年,108指2008年,以此類推。
------------------------------------------
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
time_t start, finish;
struct tm finish_t;
double elapsed_time;
int day,hour,minute,second;
_tzset();
finish_t.tm_year = 107;
finish_t.tm_mon = 11; // 取值0到11,4月的話應該是3
finish_t.tm_mday = 25; // 取值1到31
finish_t.tm_hour = 12; // 取值0到23
finish_t.tm_min = 38; // 取值0到59
finish_t.tm_sec = 0; // 取值0到59
finish_t.tm_wday = 1; // 星期標誌位,取值0到6
finish_t.tm_yday = 365; // 年標誌位,取值0到365
finish_t.tm_isdst = 0; // 標誌位
finish = mktime(&finish_t);
if(finish==-1)
{
printf("初始化錯誤。\n");
exit(-1);
}
if(finish<time(&start))
{
printf("時間差為負。\n");
exit(-1);
}
while( 1 )
{
while( !_kbhit() )
{
time(&start);
elapsed_time = difftime( finish, start );
day = (int)(elapsed_time/60/60/24);
hour = (int)(elapsed_time/60/60-24*day);
minute = (int)(elapsed_time/60-60*hour-60*24*day);
second = (int)(elapsed_time-60*minute-60*60*hour-60*60*24*day);
printf( "距離 %4d年%2d月%2d日%2d時%2d分%2d秒 還有 %2d天%2d時%2d分%2d秒\r",
finish_t.tm_year+1900, finish_t.tm_mon+1, finish_t.tm_mday,
finish_t.tm_hour, finish_t.tm_min, finish_t.tm_sec,
day,hour,minute,second
);
}
if(_getch()==27) break;
}
}