1. 程式人生 > >C語言時間日期函式總結

C語言時間日期函式總結

用到的資料結構:
time_t是一個long型別 代表機器時間,可由time( )函式獲得。

日曆時間用一個(char *) 型別的字串表示。格式為:星期 月 日 小時:分:秒 年\n\0
可由函式ctime( ) asctime( ) 得到。

以tm結構表達的時間,結構tm定義如下:                  
struct  tm  {   可由函式localtime( ), gmtime( )得到                                          
        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;   };  
//系統日期   
struct  date  {                                          
        int     da_year;    /*  Year - 1980 */               
        char    da_day;     /*  Day of the month */            
        char    da_mon;     /* Month (1 = Jan) */  };
//系統時間
struct  time    {                                          
        unsigned char ti_min;       /* Minutes */              
        unsigned char ti_hour;      /* Hours */               
        unsigned char ti_hund; /* Hundredths of seconds */     
        unsigned char   ti_sec;     /* Seconds */  };


用到的函式:
char * asctime(struct tm * ptr)  將tm結構的時間轉化為日曆時間。
char *ctime(long time)        將機器時間轉化為日曆時間。
struct tm *gmtime(time_t  *time) 將機器時間轉化為tm時間

當ptr為空時,得到機器時間;非空時,設定機器時間。
time_t  time(time_t *ptr)  得到或設定機器時間
double difftime(time_t time2, time_t time1) 得到兩次機器時間差,單位為秒

long dostounix(struct data *d, struct time *t) 將DOS的日期和時間格式轉換成UNIX標準
(機器時間(用到dos.h庫).void unixtodos(long utime, struct date *d, struct time *t)
 將UNIX格式的時間和日期轉換成DOS格式(由time 和date兩部分組成,只能由機器時間得到,並且用到dos.h庫)
void getdate(struct date *d) 得到系統日期,d 存放得到的日期資訊
void setdate(struct date *d)
void gettime(struct date *t) 得到系統時間 d 存放得到的時間資訊
void settime(struct date *t)




C語言的標準庫函式包括一系列日期和時間處理函式,它們都在標頭檔案中說明。下面列出了這些函式。
在標頭檔案中定義了三種類型:time_t,struct tm和clock_t。

在中說明的C語言時間函式

time_t time(time_t *timer);

double difftime(time_t time1,time_t time2);

struct tm *gmtime(const time_t *timer);

struct tm *localtime(const time_t *timer);

char *asctime(const struct tm *timeptr);

char *ctime(const time_t *timer);

size_t strftime(char *s,size_t maxsize,const char *format,const struct tm *timeptr);

time_t mktime(struct tm *timeptr);

clock_t clock(void);



下面是我從網上收集到的時間函式集





asctime(將時間和日期以字串格式表示)
相關函式
time,ctime,gmtime,localtime
表頭檔案
#i nclude
定義函式
char * asctime(const struct tm * timeptr);
函式說明
asctime()將引數timeptr所指的tm結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。
此函式已經由時區轉換成當地時間,字串格式為:"Wed Jun 30 21:49:08 1993\n"
返回值
若再呼叫相關的時間日期函式,此字串可能會被破壞。此函式與ctime不同處在於傳入的引數是不同的結構。
附加說明
返回一字串表示目前當地的時間日期。
範例
#i nclude
main()
{
time_t timep;
time (&timep);
printf("%s",asctime(gmtime(&timep)));
}
執行
Sat Oct 28 02:10:06 2000
 



ctime(將時間和日期以字串格式表示)
相關函式
time,asctime,gmtime,localtime
表頭檔案
#i nclude
定義函式
char *ctime(const time_t *timep);
函式說明
ctime ()將引數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。
此函式已經由時區轉換成當地時間,字串格式為"Wed Jun 30 21 :49 :08 1993\n"。若再呼叫相關的時間日期函式,此字串可能會被破壞。
返回值
返回一字串表示目前當地的時間日期。
範例
#i nclude
main()
{
time_t timep;
time (&timep);
printf("%s",ctime(&timep));
}
執行
Sat Oct 28 10 : 12 : 05 2000
 



gettimeofday(取得目前的時間)
相關函式
time,ctime,ftime,settimeofday
表頭檔案
#i nclude
#i nclude
定義函式
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函式說明
gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的資訊則放到tz所指的結構中。
timeval結構定義為:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 結構定義為:
struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鐘*/
int tz_dsttime; /*日光節約時間的狀態*/
};
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
DST_NONE /*不使用*/
DST_USA /*美國*/
DST_AUST /*澳洲*/
DST_WET /*西歐*/
DST_MET /*中歐*/
DST_EET /*東歐*/
DST_CAN /*加拿大*/
DST_GB /*大不列顛*/
DST_RUM /*羅馬尼亞*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以後)*/
返回值
成功則返回0,失敗返回-1,錯誤程式碼存於errno。附加說明EFAULT指標tv和tz所指的記憶體空間超出存取許可權。
範例
#i nclude
#i nclude
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf("tv_sec; %d\n", tv,.tv_sec) ;
printf("tv_usec; %d\n",tv.tv_usec);
printf("tz_minuteswest; %d\n", tz.tz_minuteswest);
printf("tz_dsttime, %d\n",tz.tz_dsttime);
}
執行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
 



gmtime(取得目前時間和日期)
相關函式
time,asctime,ctime,localtime
表頭檔案
#i nclude
定義函式
struct tm*gmtime(const time_t*timep);
函式說明
gmtime()將引數timep 所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。
結構tm的定義為
struct tm
{
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;
};
int tm_sec 代表目前秒數,正常範圍為0-59,但允許至61秒
int tm_min 代表目前分數,範圍0-59
int tm_hour 從午夜算起的時數,範圍為0-23
int tm_mday 目前月份的日數,範圍01-31
int tm_mon 代表目前月份,從一月算起,範圍從0-11
int tm_year 從1900 年算起至今的年數
int tm_wday 一星期的日數,從星期一算起,範圍為0-6
int tm_yday 從今年1月1日算起至今的天數,範圍為0-365
int tm_isdst 日光節約時間的旗標
此函式返回的時間日期未經時區轉換,而是UTC時間。
返回值
返回結構tm代表目前UTC 時間
範例
#i nclude
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf("%d%d%d",(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf("%s%d;%d;%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
}
執行
2000/10/28 Sat 8:15:38
 



localtime(取得當地目前時間和日期)
相關函式
time, asctime, ctime, gmtime
表頭檔案
#i nclude
定義函式
struct tm *localtime(const time_t * timep);
函式說明
localtime()將引數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。
結構tm的定義請參考gmtime()。此函
數返回的時間日期已經轉換成當地時區。
返回值
返回結構tm代表目前的當地時間。
範例
#i nclude
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*取得當地時間*/
printf ("%d%d%d ", (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);
printf("%s%d:%d:%d\n", wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
}
執行
2000/10/28 Sat 11:12:22
 



mktime(將時間結構資料轉換成經過的秒數)
相關函式
time,asctime,gmtime,localtime
表頭檔案
#i nclude
定義函式
time_t mktime(strcut tm * timeptr);
函式說明
mktime()用來將引數timeptr所指的tm結構資料轉換成從公元1970年1月1日0時0分0 秒算起至今的UTC時間所經過的秒數。
返回值
返回經過的秒數。
範例
/* 用time()取得時間(秒數),利用localtime()
轉換成struct tm 再利用mktine()將struct tm轉換成原來的秒數*/
#i nclude
main()
{
time_t timep;
strcut tm *p;
time(&timep);
printf("time() : %d \n",timep);
p=localtime(&timep);
timep = mktime(p);
printf("time()->localtime()->mktime():%d\n",timep);
}
執行
time():974943297
time()->localtime()->mktime():974943297
 



settimeofday(設定目前時間)
相關函式
time,ctime,ftime,gettimeofday
表頭檔案
#i nclude
#i nclude
定義函式
int settimeofday ( const struct timeval *tv,const struct timezone *tz);
函式說明
settimeofday()會把目前時間設成由tv所指的結構資訊,當地時區資訊則設成tz所指的結構。詳細的說明請參考gettimeofday()。
注意,只有root許可權才能使用此函式修改時間。
返回值
成功則返回0,失敗返回-1,錯誤程式碼存於errno。
錯誤程式碼
EPERM 並非由root許可權呼叫settimeofday(),許可權不夠。
EINVAL 時區或某個資料是不正確的,無法正確設定時間。
 



time(取得目前的時間)
相關函式
ctime,ftime,gettimeofday
表頭檔案
#i nclude
定義函式
time_t time(time_t *t);
函式說明
此函式會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t 並非空指標的話,
此函式也會將返回值存到t指標所指的記憶體。
返回值
成功則返回秒數,失敗則返回((time_t)-1)值,錯誤原因存於errno中。
範例
#i nclude
mian()
{
int seconds= time((time_t*)NULL);
printf("%d\n",seconds);
}

Date and Time Functions: <time.h>
The header <time.h> declares types and functions for manipulating date and time. Some functions process local time,
 which may differ from calendar time, for example because of time zone. clock_t and time_t are arithmetic types
 representing times, and struct tm holds the components
 of a calendar time: 
int tm_sec;  seconds after the minute (0,61) 
int tm_min;  minutes after the hour (0,59) 
int tm_hour;  hours since midnight (0,23) 
int tm_mday;  day of the month (1,31) 
int tm_mon;  months since January (0,11) 
int tm_year;  years since 1900 
int tm_wday;  days since Sunday (0,6) 
int tm_yday;  days since January 1 (0,365) 
int tm_isdst; Daylight Saving Time flag 


tm_isdst is positive if Daylight Saving Time is in effect, zero if not, and negative if the information is not available. 



clock_t clock(void) 
clock returns the processor time used by the program since the beginning of execution, or -1 if unavailable. 
clock()/CLK_PER_SEC is a time in 
seconds. 

time_t time(time_t *tp) 
time returns the current calendar time or -1 if the time is not available. If tp is not NULL,
 the return value is also assigned to *tp. 

double difftime(time_t time2, time_t time1) 
difftime returns time2-time1 expressed in seconds. 

time_t mktime(struct tm *tp) 
mktime converts the local time in the structure *tp into calendar time in the same representation used by time. 
The components will have values
 in the ranges shown. mktime returns the calendar time or -1 if it cannot be represented. 
The next four functions return pointers to static objects that may be overwritten by other calls. 
char *asctime(const struct tm *tp) 
asctime*tp into a string of the form 
      Sun Jan  3 15:14:13 1988\n\0


char *ctime(const time_t *tp) 
ctime converts the calendar time *tp to local time; it is equivalent to 
      asctime(localtime(tp)) 

struct tm *gmtime(const time_t *tp) 
gmtime converts the calendar time *tp into Coordinated Universal Time (UTC). It returns NULL if UTC is not available.
 The name gmtime has historical significance. 

struct tm *localtime(const time_t *tp) 
localtime converts the calendar time *tp into local time. 

size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp) 
strftime formats date and time information from *tp into s according to fmt, which is analogous to a printf format.
 Ordinary characters (including the terminating '\0') are copied into s. Each %c is replaced as described below,
 using values appropriate for the local environment.
 No more than smax characters are placed into s. strftime returns the number of characters, excluding the '\0', 
or zero if more than smax characters were produced. 
%a abbreviated weekday name. 
%A full weekday name. 
%b abbreviated month name. 
%B full month name. 
%c local date and time representation. 
%d day of the month (01-31). 
%H hour (24-hour clock) (00-23). 
%I hour (12-hour clock) (01-12). 
%j day of the year (001-366). 
%m month (01-12). 
%M minute (00-59). 
%p local equivalent of AM or PM. 
%S second (00-61). 
%U week number of the year (Sunday as 1st day of week) (00-53). 
%w weekday (0-6, Sunday is 0). 
%W week number of the year (Monday as 1st day of week) (00-53). 
%x local date representation. 
%X local time representation. 
%y year without century (00-99). 
%Y year with century. 
%Z time zone name, if any. 
%%   %