time.h 详细介绍
< ctime> (time.h)
包含获得和使用日期和时间信息的函数的定义。
clock_t:时钟类型,表示时钟滴答数的基本数据类型
size_t:无符号整型
time_t:时间类型,表示时间
struct tm:时间结构,包含日历、时间
Member | Type | Meaning | Range |
---|---|---|---|
tm_sec | int | seconds | after the minute0-60* |
tm_min | int | minutes | after the hour 0-59 |
tm_hour | int | hours | since midnight 0-23 |
tm_mday | int | day | of the month 1-31 |
tm_mon | int | months | since January 0-11 |
tm_year | int | years | since 1900 |
tm_wday | int | days | since Sunday 0-6 |
tm_yday | int | days | since January 1 0-365 |
tm_isdst | int | Daylight | Saving Time flag |
1、clock_t clock (void);
描述:从特定时间开始消耗的时间,如果失败,返回-1。
/* clock example: frequency of primes */
#include /* printf */
#include /* clock_t, clock, CLOCKS_PER_SEC */
#include /* sqrt */
int frequency_of_primes (int n) {
int i,j;
int freq=n-1;
for (i=2; i<=n; ++i) for (j=sqrt(i);j>1;--j) if (i%j==0) {--freq; break;}
return freq;
}
int main ()
{
clock_t t;
int f;
t = clock();
printf ("Calculating...\n");
f = frequency_of_primes (99999);
printf ("The number of primes lower than 100,000 is: %d\n",f);
t = clock() - t;
printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
return 0;
}
2、double difftime (time_t end, time_t beginning);
描述:计算从beginning到end的时间(end-beginning)(单位/秒)。
/* difftime example */
#include /* printf */
#include <time.h> /* time_t, struct tm, difftime, time, mktime */
int main ()
{
time_t now;
struct tm newyear;
double seconds;
time(&now); /* get current time; same as: now = time(NULL) */
newyear = *localtime(&now);
newyear.tm_hour = 0; newyear.tm_min = 0; newyear.tm_sec = 0;
newyear.tm_mon = 0; newyear.tm_mday = 1;
seconds = difftime(now,mktime(&newyear));
printf ("%.f seconds since new year in the current timezone.\n", seconds);
return 0;
}
3、time_t mktime (struct tm * timeptr);
描述:
返回timeptr指针描述的时间,如果时间未描述,返回-1。
localtime的逆变换
忽略结构成员tm_wday and tm_yday;其他成员及时超出有效范围,也将解释。
/* mktime example: weekday calculator */
#include /* printf, scanf */
#include <time.h> /* time_t, struct tm, time, mktime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
int year, month ,day;
const char * weekday[] = { "Sunday", "Monday",
"Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
/* prompt user for date */
printf ("Enter year: "); fflush(stdout); scanf ("%d",&year);
printf ("Enter month: "); fflush(stdout); scanf ("%d",&month);
printf ("Enter day: "); fflush(stdout); scanf ("%d",&day);
/* get current timeinfo and modify it to the user's choice */
time ( &rawtime );
timeinfo = localtime ( &rawtime );
timeinfo->tm_year = year - 1900;
timeinfo->tm_mon = month - 1;
timeinfo->tm_mday = day;
/* call mktime: timeinfo->tm_wday will be set */
mktime ( timeinfo );
printf ("That day is a %s.\n", weekday[timeinfo->tm_wday]);
return 0;
}
4、time_t time (time_t* timer);
描述:
获取当前时间。
如果时间指针不为NULL,将返回其指向的时间。
不能取得时间,返回-1.
返回的时间基于: 00:00 hours, Jan 1, 1970 UTC
/* time example */
#include /* printf */
#include <time.h> /* time_t, struct tm, difftime, time, mktime */
int main ()
{
time_t timer;
struct tm y2k = {0};
double seconds;
y2k.tm_hour = 0; y2k.tm_min = 0; y2k.tm_sec = 0;
y2k.tm_year = 100; y2k.tm_mon = 0; y2k.tm_mday = 1;
time(&timer); /* get current time; same as: timer = time(NULL) */
seconds = difftime(timer,mktime(&y2k));
printf ("%.f seconds since January 1, 2000 in the current timezone", seconds);
return 0;
}
1、char* asctime (const struct tm * timeptr);
描述:
返回timeptr指针的时间,用C-字符串描述
返回类型为:Www Mmm dd hh:mm:ss yyyy(星期 月 日 时分秒 年)
输出在新一行,以空字符串结束
/* asctime example */
#include /* printf */
#include /* time_t, struct tm, time, localtime, asctime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
return 0;
}
2、char* ctime (const time_t * timer);
描述:
返回timer指针的时间,用C-字符串描述
返回类型为:Www Mmm dd hh:mm:ss yyyy(星期 月 日 时分秒 年)
输出在新一行,以空字符串结束
和asctime(localtime(timer))一样
/* ctime example */
#include /* printf */
#include /* time_t, time, ctime */
int main ()
{
time_t rawtime;
time (&rawtime);
printf ("The current local time is: %s", ctime (&rawtime));
return 0;
}
3、struct tm * gmtime (const time_t * timer);
描述:
利用timer填充tm结构体
把time_t时间转化为UTC time
/* gmtime example */
#include /* puts, printf */
#include /* time_t, struct tm, time, gmtime */
#define MST (-7)
#define UTC (0)
#define CCT (+8)
int main ()
{
time_t rawtime;
struct tm * ptm;
time ( &rawtime );
ptm = gmtime ( &rawtime );
puts ("Current time around the World:");
printf ("Phoenix, AZ (U.S.) : %2d:%02d\n", (ptm->tm_hour+MST)%24, ptm->tm_min);
printf ("Reykjavik (Iceland) : %2d:%02d\n", (ptm->tm_hour+UTC)%24, ptm->tm_min);
printf ("Beijing (China) : %2d:%02d\n", (ptm->tm_hour+CCT)%24, ptm->tm_min);
return 0;
}
4、struct tm * localtime (const time_t * timer);
描述:
利用timer填充tm结构体
把time_t时间转化为 local time
/* localtime example */
#include /* puts, printf */
#include /* time_t, struct tm, time, localtime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
printf ("Current local time and date: %s", asctime(timeinfo));
return 0;
}
5、·size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr );
描述:
把timeptr中的时间,以特定的格式,复制到ptr中
以format格式,复制时间timeptr到ptr,最多maxsize字符。
ptr:目的数组,存储C-字符串
maxsize:包括末尾空字符,复制到ptr的最大字符数
format:格式
返回值:返回复制到ptr的字符数(不包括末尾空字符),若超出范围maxsize,返回0
/* strftime example */
#include /* puts */
#include /* time_t, struct tm, time, localtime, strftime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
char buffer [80];
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
puts (buffer);
return 0;
}
specifier | Replaced by | Example |
---|---|---|
%a | Abbreviated | weekday name * |
%A | Full weekday name * | Thursday |
%b | Abbreviated month name * | Aug |
%B | Full month name * | August |
%c | Date and time representation * | Thu Aug 23 14:55:02 2001 |
%C | Year divided by 100 and truncated to integer (00-99) | 20 |
%d | Day of the month, zero-padded (01-31) | 23 |
%D | Short MM/DD/YY date, equivalent to %m/%d/%y | 08/23/01 |
%e | Day of the month, space-padded ( 1-31) | 23 |
%F | Short YYYY-MM-DD date, equivalent to %Y-%m-%d | 2001-08-23 |
%g | Week-based year, last two digits (00-99) | 01 |
%G | Week-based year | 2001 |
%h | Abbreviated month name * (same as %b) | Aug |