用C語言輸出當前的系統時間,在C語言庫中已經提供了很多方法,有的方法能夠獲取到毫秒級別的時間,
很多時候,需要獲取程式執行時間的時間差,那么能夠精確到毫秒的時間就更為合適,
下面介紹四種方式,分別給出了實體,在輸出時間的時候,需要注意各個輸出資料的大小,不要超過資料所能表示的范圍,
方法1,用time.h中的方法獲取時間
time_t start, end;start = time(NULL);Sleep(1000);end = time(NULL);printf("start=%d\n", start);printf("end=%d\n", end);printf("times=%d\n", end - start);
輸出如下
start=1617535664end=1617535665times=1
輸出的時間以秒為單位,也就是說精確到為秒,
如果想要更高的精確度的話,這個顯然是不合適的,
方法2,用windows.h中的方法獲取時間
int start,end;start = GetTickCount();Sleep(1000);end = GetTickCount();printf("start: %d ms\n", start);printf("end: %d ms\n", end);printf("time: %d ms\n", end - start);
這個也是輸出時間的函式,輸出如下
start: 9983061538135917 msend: 9983061538136917 mstime: 9983058774066152 ms
這個輸出結果似乎不對,仔細看看,這些數值已經超過了int所能夠表示的范圍,兩者相減,自然是錯誤的輸出,
如何修改呢?請參考公眾號
方法3,獲取到毫秒級別的時間
LARGE_INTEGER li;LONGLONG start, end, freq;QueryPerformanceFrequency(&li);freq = li.QuadPart;QueryPerformanceCounter(&li);start = li.QuadPart;Sleep(3000);QueryPerformanceCounter(&li);end = li.QuadPart;int useTime = (int)((end - start) * 1000 / freq);printf("time: %d ms\n", useTime);printf("(end - start) * 1000: %lld ms\n", (end - start) * 1000);printf("freq: %ld ms\n", freq);
這種方式也能輸出毫秒級的時間,但是一定要注意各種資料的長度,在格式控制符的選擇上,一定要小心,
time: 3001 ms(end - start) * 1000: 7017387000 msfreq: 2338339 ms
這種方式輸出的時間精度,可能沒有下面這種方式的高
方法4,獲取到日期等,精確到毫秒
代碼放在main函式中,頭檔案windos.h
SYSTEMTIME currentTime;GetSystemTime(¤tTime);printf("time: %u/%u/%u %u:%u:%u:%u %d\n",currentTime.wYear, currentTime.wMonth, currentTime.wDay,currentTime.wHour, currentTime.wMinute, currentTime.wSecond,currentTime.wMilliseconds, currentTime.wDayOfWeek);
運行輸出
time: 2021/4/4 10:51:38:486 0
最后輸出的0表示星期天如何求時間差?請參考公眾號
這里用int型別,在VS2017中有4個位元組的記憶體,是足夠大的,如果是在2個位元組的記憶體時,則需要用long型別回傳,
以上是四種輸出時間差的方式,運行環境是VS2017,Windows系統,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272790.html
標籤:其他
上一篇:3.變數與常量
