在C語言中,有兩個擷取目前時間的函數:localtime和GetLocalTime。它們在諸如對賬一類的程式中應用很廣。
本文對localtime和GetLocalTime進行較為詳細的介紹,並舉例說明它們的用法。
1.前言
在C語言中,擷取當前系統時間的操作時有發生。例如,在對賬程式中,需要在對賬檔案名稱中加入當天的日期及時間。一般而言,經常使用的擷取目前時間的函數有兩個:localtime和GetLocalTime。
本文分別介紹了localtime和GetLocalTime函數,並舉例說明了它們的用法。
2. localtime和GetLocalTime函數介紹
2.1 localtime函數介紹
功能:把從1970-1-1零點零分(程式中是從1900年開始算的)到目前時間系統所位移的秒數時間轉換為日曆時間。
說明:此函數獲得的tm結構體的時間,已經進行過時區轉化,成為了本地時間。
用法:struct tm *localtime(const time_t *clock)。
傳回值:返回指向tm結構體的指標。
tm結構體是time.h中定義的用於分別儲存時間的各個量(年月日等)的結構體,其定義如下:
#ifndef _TM_DEFINED struct tm { int tm_sec; /*秒–取值區間為[0,59] */ int tm_min; /*分 -取值區間為[0,59] */ int tm_hour; /*時 -取值區間為[0,23] */ int tm_mday; /*一個月中的日期 -取值區間為[1,31] */ int tm_mon; /*月份(從一月開始,0代表一月) -取值區間為[0,11] */ int tm_year; /*年份,其值從1900開始 */ int tm_wday; /*星期–取值區間為[0,6],其中0代表星期天,1代表星期一,等等 */ int tm_yday; /*從每年的1月1日開始的天數–取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */ int tm_isdst; /*夏令時標識符,實行夏令時的時候,tm_isdst為正;不實行夏令時的進候,tm_isdst為0;不瞭解情況時,tm_isdst()為負 */ long int tm_gmtoff; /*指定了日期變更線東面時區中UTC東部時區正秒數或UTC西部時區的負秒數*/ const char *tm_zone; /*當前時區的名字(與環境變數TZ有關)*/ }; #define _TM_DEFINED #endif
2.2 GetLocalTime函數介紹
函數功能:該函數用來擷取當地的當前系統日期和時間。
函數原型:void GetLocalTime(LPSYSTEMTIME lpSystemTime // address of system times structure);
參數說明:
lpSystemTime:指向一個使用者自訂包含日期和時間資訊的類型為SYSTEMTIME的變數,該變數用來儲存函數擷取的時間資訊。
SYSTEMTIME結構體的定義如下:
typedef struct _SYSTEMTIME { WORD wYear; //年 WORD wMonth; //月 WORD wDayOfWeek; //星期,0為星期日,1為星期一,2為星期二…… WORD wDay; //日 WORD wHour; //時 WORD wMinute; //分 WORD wSecond; //秒 WORD wMilliseconds; //毫秒 }SYSTEMTIME,*PSYSTEMTIME;