C語言的標(biāo)準(zhǔn)庫函數(shù)包括一系列日期和時(shí)間處理函數(shù),它們都在頭文件中說明。
創(chuàng)新互聯(lián)公司云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、雅安電信機(jī)房、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn),已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名與空間、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
在頭文件中定義了三種類型:time_t,struct tm和clock_t。
下面列出了這些函數(shù)。
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);
【具體應(yīng)用舉例】
asctime(將時(shí)間和日期以字符串格式表示)
相關(guān)函數(shù)
time,ctime,gmtime,localtime
表頭文件
#i nclude
定義函數(shù)
char * asctime(const struct tm * timeptr);
函數(shù)說明
asctime()將參數(shù)timeptr所指的tm結(jié)構(gòu)中的信息轉(zhuǎn)換成真實(shí)世界所使用的時(shí)間日期表示方法,然后將結(jié)果以字符串形態(tài)返回。
此函數(shù)已經(jīng)由時(shí)區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r(shí)間,字符串格式為:"Wed Jun 30 21:49:08 1993\n"
返回值
若再調(diào)用相關(guān)的時(shí)間日期函數(shù),此字符串可能會(huì)被破壞。此函數(shù)與ctime不同處在于傳入的參數(shù)是不同的結(jié)構(gòu)。
附加說明
返回一字符串表示目前當(dāng)?shù)氐臅r(shí)間日期。
范例
#i nclude
main()
{
time_t timep;
time (timep);
printf("%s",asctime(gmtime(timep)));
}
執(zhí)行
Sat Oct 28 02:10:06 2000
ctime(將時(shí)間和日期以字符串格式表示)
相關(guān)函數(shù)
time,asctime,gmtime,localtime
表頭文件
#i nclude
定義函數(shù)
char *ctime(const time_t *timep);
函數(shù)說明
ctime ()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實(shí)世界所使用的時(shí)間日期表示方法,然后將結(jié)果以字符串形態(tài)返回。
此函數(shù)已經(jīng)由時(shí)區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r(shí)間,字符串格式為"Wed Jun 30 21 :49 :08 1993\n"。若再調(diào)用相關(guān)的時(shí)間日期函數(shù),此字符串可能會(huì)被破壞。
返回值
返回一字符串表示目前當(dāng)?shù)氐臅r(shí)間日期。
范例
#i nclude
main()
{
time_t timep;
time (timep);
printf("%s",ctime(timep));
}
執(zhí)行
Sat Oct 28 10 : 12 : 05 2000
gettimeofday(取得目前的時(shí)間)
相關(guān)函數(shù)
time,ctime,ftime,settimeofday
表頭文件
#i nclude
#i nclude
定義函數(shù)
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函數(shù)說明
gettimeofday()會(huì)把目前的時(shí)間有tv所指的結(jié)構(gòu)返回,當(dāng)?shù)貢r(shí)區(qū)的信息則放到tz所指的結(jié)構(gòu)中。
timeval結(jié)構(gòu)定義為:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 結(jié)構(gòu)定義為:
struct timezone{
int tz_minuteswest; /*和Greenwich 時(shí)間差了多少分鐘*/
int tz_dsttime; /*日光節(jié)約時(shí)間的狀態(tài)*/
};
上述兩個(gè)結(jié)構(gòu)都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態(tài)如下
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,錯(cuò)誤代碼存于errno。附加說明EFAULT指針tv和tz所指的內(nèi)存空間超出存取權(quán)限。
范例
#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);
}
執(zhí)行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
gmtime(取得目前時(shí)間和日期)
相關(guān)函數(shù)
time,asctime,ctime,localtime
表頭文件
#i nclude
定義函數(shù)
struct tm*gmtime(const time_t*timep);
函數(shù)說明
gmtime()將參數(shù)timep 所指的time_t 結(jié)構(gòu)中的信息轉(zhuǎn)換成真實(shí)世界所使用的時(shí)間日期表示方法,然后將結(jié)果由結(jié)構(gòu)tm返回。
結(jié)構(gòu)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 代表目前秒數(shù),正常范圍為0-59,但允許至61秒
int tm_min 代表目前分?jǐn)?shù),范圍0-59
int tm_hour 從午夜算起的時(shí)數(shù),范圍為0-23
int tm_mday 目前月份的日數(shù),范圍01-31
int tm_mon 代表目前月份,從一月算起,范圍從0-11
int tm_year 從1900 年算起至今的年數(shù)
int tm_wday 一星期的日數(shù),從星期一算起,范圍為0-6
int tm_yday 從今年1月1日算起至今的天數(shù),范圍為0-365
int tm_isdst 日光節(jié)約時(shí)間的旗標(biāo)
此函數(shù)返回的時(shí)間日期未經(jīng)時(shí)區(qū)轉(zhuǎn)換,而是UTC時(shí)間。
返回值
返回結(jié)構(gòu)tm代表目前UTC 時(shí)間
范例
#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);
}
執(zhí)行
2000/10/28 Sat 8:15:38
localtime(取得當(dāng)?shù)啬壳皶r(shí)間和日期)
相關(guān)函數(shù)
time, asctime, ctime, gmtime
表頭文件
#i nclude
定義函數(shù)
struct tm *localtime(const time_t * timep);
函數(shù)說明
localtime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實(shí)世界所使用的時(shí)間日期表示方法,然后將結(jié)果由結(jié)構(gòu)tm返回。
結(jié)構(gòu)tm的定義請參考gmtime()。此函
數(shù)返回的時(shí)間日期已經(jīng)轉(zhuǎn)換成當(dāng)?shù)貢r(shí)區(qū)。
返回值
返回結(jié)構(gòu)tm代表目前的當(dāng)?shù)貢r(shí)間。
范例
#i nclude
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(timep);
p=localtime(timep); /*取得當(dāng)?shù)貢r(shí)間*/
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);
}
執(zhí)行
2000/10/28 Sat 11:12:22
mktime(將時(shí)間結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成經(jīng)過的秒數(shù))
相關(guān)函數(shù)
time,asctime,gmtime,localtime
表頭文件
#i nclude
定義函數(shù)
time_t mktime(strcut tm * timeptr);
函數(shù)說明
mktime()用來將參數(shù)timeptr所指的tm結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成從公元1970年1月1日0時(shí)0分0 秒算起至今的UTC時(shí)間所經(jīng)過的秒數(shù)。
返回值
返回經(jīng)過的秒數(shù)。
范例
/* 用time()取得時(shí)間(秒數(shù)),利用localtime()
轉(zhuǎn)換成struct tm 再利用mktine()將struct tm轉(zhuǎn)換成原來的秒數(shù)*/
#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);
}
執(zhí)行
time():974943297
time()-localtime()-mktime():974943297
settimeofday(設(shè)置目前時(shí)間)
相關(guān)函數(shù)
time,ctime,ftime,gettimeofday
表頭文件
#i nclude
#i nclude
定義函數(shù)
int settimeofday ( const struct timeval *tv,const struct timezone *tz);
函數(shù)說明
settimeofday()會(huì)把目前時(shí)間設(shè)成由tv所指的結(jié)構(gòu)信息,當(dāng)?shù)貢r(shí)區(qū)信息則設(shè)成tz所指的結(jié)構(gòu)。詳細(xì)的說明請參考gettimeofday()。
注意,只有root權(quán)限才能使用此函數(shù)修改時(shí)間。
返回值
成功則返回0,失敗返回-1,錯(cuò)誤代碼存于errno。
錯(cuò)誤代碼
EPERM 并非由root權(quán)限調(diào)用settimeofday(),權(quán)限不夠。
EINVAL 時(shí)區(qū)或某個(gè)數(shù)據(jù)是不正確的,無法正確設(shè)置時(shí)間。
time(取得目前的時(shí)間)
相關(guān)函數(shù)
ctime,ftime,gettimeofday
表頭文件
#i nclude
定義函數(shù)
time_t time(time_t *t);
函數(shù)說明
此函數(shù)會(huì)返回從公元1970年1月1日的UTC時(shí)間從0時(shí)0分0秒算起到現(xiàn)在所經(jīng)過的秒數(shù)。如果t 并非空指針的話,
此函數(shù)也會(huì)將返回值存到t指針?biāo)傅膬?nèi)存。
返回值
成功則返回秒數(shù),失敗則返回((time_t)-1)值,錯(cuò)誤原因存于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.
%% %
分別用三個(gè)函數(shù):
輸入(time_input)、輸出(time_output)、轉(zhuǎn)換(time_change)函數(shù)來實(shí)現(xiàn);
參考如下:
#includeiostream
#includecstdlib
using?namespace?std;
void?time_input(int?hour,int?minute);
void?time_output(int?hour,int?minte,char?noon);
void?time_change(int?hour,int?minte,char?noon);
int?main()
{
int?hour,minute;
char?p;
char?noon;
do{
time_input(hour,minute);
time_change(hour,minute,noon);
time_output(hour,minute,noon);
cout"Enter?'r'?to?again.?";
cinp;
}while(p=='R'||p=='r');
system("pause");//某些編譯器此處可以不要
return?0;
}
void?time_input(int?hour,int?minute)
{
cout"Enter?hour:";
cinhour;
cout"Enter?minte:";
cinminute;
}
void?time_output(int?hour,int?minute,char?noon)
{
cout"12-hours:?"
hour
":"
minute
"?"
noon
endl;
}
void?time_change(int?hour,int?minute,char?noon)
{
if((hour12hour=24)(minute=0minute=60))
{
noon='P';
hour-=12;
}
else?if((hour=0hour12)(minute=0minute=60))?{noon='A';}
else?{cout"Time?is?error!\n";}
}
1、C里沒有相應(yīng)的庫,只能用asctime函數(shù)轉(zhuǎn)換成一種固定格式。如果要轉(zhuǎn)換,可以用sprintf把各種數(shù)據(jù)以“ 1980-01-02 02:03:55 ” 這種標(biāo)準(zhǔn)格式,格式到一個(gè)字符串中。
2、asctime函數(shù):
原型:char* asctime (const struct tm * timeptr);
功能:把timeptr指向的tm結(jié)構(gòu)體中儲(chǔ)存的時(shí)間轉(zhuǎn)換為字符串;
頭文件:time.h;
返回值:一個(gè)固定格式的字符串。字符串格式為:Www Mmm dd hh:mm:ss yyyy。其中Www為星期,Mmm為月份,dd為日,hh為時(shí),mm為分,ss為秒,yyyy為年份。
3、例程:
#includetime.h
#includestdio.h
int?main(){
time_t?rawtime;
struct?tm?*?timeinfo;
time(rawtime);
timeinfo?=?localtime(rawtime);//使用localtime函數(shù)把秒數(shù)時(shí)間rawtime轉(zhuǎn)換為本地時(shí)間以tm結(jié)構(gòu)體保存,并把tm結(jié)構(gòu)體地址儲(chǔ)存到timeinfo當(dāng)中
printf("當(dāng)前日期為:?%s",asctime(timeinfo));//使用asctime函數(shù)把tm結(jié)構(gòu)體中儲(chǔ)存的時(shí)間轉(zhuǎn)換為字符串,并輸出
return?0;
}