您所在的位置 : IT客 » 程序開發 » C/C++

C語言獲取當前系統時間的幾種方式

C語言獲取系統時間的幾種方式

C語言中如何獲取時間?精度如何?

1 使用time_t time( time_t * timer ) 精確到秒

2 使用clock_t clock() 得到的是CPU時間精確到1/CLOCKS_PER_SEC秒

3 計算時間差使用double difftime( time_t timer1, time_t timer0 )

4 使用DWORD GetTickCount() 精確到毫秒

5 如果使用MFC的CTime類,可以用CTime::GetCurrentTime() 精確到秒

6 要獲取高精度時間,可以使用

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)

獲取系統的計數器的頻率

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)

獲取計數器的值

然後用兩次計數器的差除以Frequency就得到時間。

7 Multimedia Timer Functions

The following functions are used with multimedia timers.

timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime

//*********************************************************************

//用標準C實現獲取當前系統時間的函數

一.time()函數

     time(&rawtime)函數獲取當前時間距1970年1月1日的秒數,以秒計數單位,存於rawtime 中。

#include "time.h"

void main ()

time_t rawtime;

struct tm * timeinfo;

time ( &rawtime );

timeinfo = localtime ( &rawtime );

printf ( "\007The current date/time is: %s", asctime (timeinfo) );

exit(0);

=================

#include -- 必須的時間函數頭文件

time_t -- 時間類型(time.h 定義是typedef long time_t; 追根溯源,time_t是long)

struct tm -- 時間結構,time.h 定義如下:

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_isdst;

time ( &rawtime ); -- 獲取時間,以秒計,從1970年1月一日起算,存於rawtime

localtime ( &rawtime ); -- 轉爲當地時間,tm 時間結構

asctime ()-- 轉爲標準ASCII時間格式:

星期 月 日 時:分:秒 年

-----------------------------------------------------------------------------

二.clock()函數,用clock()函數,得到系統啓動以後的毫秒級時間,然後除以CLOCKS_PER_SEC,就可以換成“秒”,標準c函數。

clock_t clock ( void );

#include

clock_t t = clock();

long sec = t / CLOCKS_PER_SEC;

他是記錄時鐘週期的,實現看來不會很精確,需要試驗驗證;

---------------------------------------------------------------------------

三.gettime(&t); 據說tc2.0的time結構含有毫秒信息

#include

#include

int main(void)

struct time t;

gettime(&t);

printf("The current time is: -:d:d.d\n",

t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);

return 0;

time 是一個結構體,, 其中成員函數 ti_hund 是毫秒。。。

--------------------------------------------------------------------------------

四.GetTickCount(),這個是windows裏面常用來計算程序運行時間的函數;

DWORD dwStart = GetTickCount();

//這裏運行你的程序代碼

DWORD dwEnd = GetTickCount();

則(dwEnd-dwStart)就是你的程序運行時間, 以毫秒爲單位

這個函數只精確到55ms,1個tick就是55ms。

--------------------------------------------------------------------------------

五.timeGetTime()t,imeGetTime()基本等於GetTickCount(),但是精度更高

DWORD dwStart = timeGetTime();

//這裏運行你的程序代碼

DWORD dwEnd = timeGetTime();

則(dwEnd-dwStart)就是你的程序運行時間, 以毫秒爲單位

雖然返回的值單位應該是ms,但傳說精度只有10ms。

=========================================

//*****************************************************************Unix

##unix時間相關,也是標準庫的

//*********************************************************************

1.timegm函數只是將struct tm結構轉成time_t結構,不使用時區信息;

time_t timegm(struct tm *tm);

2.mktime使用時區信息

time_t mktime(struct tm *tm);

timelocal 函數是GNU擴展的與posix函數mktime相當

time_t timelocal (struct tm *tm);

3.gmtime函數只是將time_t結構轉成struct tm結構,不使用時區信息;

struct tm * gmtime(const time_t *clock);

4.localtime使用時區信息

struct tm * localtime(const time_t *clock);

1.time獲取時間,stime設置時間

time_t t;

t = time(&t);

2.stime其參數應該是GMT時間,根據本地時區設置爲本地時間;

int stime(time_t *tp)

3.UTC=true 表示採用夏時制;

4.文件的修改時間等信息全部採用GMT時間存放,不同的系統在得到修改時間後通過localtime轉換成本地時間;

5.設置時區推薦使用setup來設置;

6.設置時區也可以先更變/etc/sysconfig/clock中的設置再將ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效

time_t只能表示68年的範圍,即mktime只能返回1970-2038這一段範圍的time_t

看看你的系統是否有time_t64,它能表示更大的時間範圍

頂一下
(0)
踩一下
(0)

發表評論:

昵稱: *
內容:
驗證碼:
rss· 投稿· 加入收藏· 手機版