以前经常在程序中获取系统时间,计算时间,但是每次都是到网上临时找来一些资料对付过去,今天就索性整理一下。 关于C语言time.h的一些应用。 clock_t clock(void); //得到从进程启动到此次函数调用的累计的时钟滴答数。每秒包含CLOCKS_PER_SEC(time.h中定义的常量,一般为1000,貌似linux下为1000000)个时钟滴答。时钟滴答数用数据类型clock_t表示。clock_t类型一般是32位整数类型。 time_t time(time_t* timer); //得到从标准计时点(一般是1970年1月1日0时0秒)到当前时间的秒数。日历时间用数据类型time_t表示。time_t类型实际上一般是32位或64位整数类型。 分解时间同结构体类型表示tm表示: struct tm { int tm_hour; //时 0~23 int tm_isdst; //夏令时是否开启 开启(> 0),关闭(= 0),未知(< 0) int tm_mday; //日 0~31 int tm_min; //分 0~59 int tm_mon; //月 0~11 int tm_sec; //秒 0~60(60为天文学中定义的闰秒) int tm_wday; //星期,从星期天计 0~6 int tm_yday; //本年经过的天数 0~365 int tm_year; //从1900年起经过的年数 }; struct tm* gmtime(const time_t* timer); //从日历时间time_t到分解时间tm的转换。函数返回的是一个静态分配的tm结构存储空间,该存储空间被gmtime,localtime与ctime函数所共用. 这些函数的每一次调用会覆盖这块tm结构存储空间的内容。 struct tm* gmtime_r(const time_t* timer , struct tm*result); //该函数是gmtime函数的线程安全版本 struct tm* localtime(const time_t* timer); //从日历时间time_t到分解时间tm的转换,即结果数据已经调整到本地时区与夏令时。 time_t mktime(struct tm* ptm); //从分解时间tm到日历时间time_t的转换。 time_t timegm(struct tm* brokentime); //从分解时间tm(被视作UTC时间,不考虑本地时区设置)到日历时间time_t的转换。该函数较少被使用。 double difftime(time_t timer2, time_t timer1); //比较两个日历时间,返回double类型的秒数差。似乎用处不大,time_t可以直接相减
以下是几个把日期数据按常用格式输出的函数: char *asctime(const struct tm* tmptr); //把分解时间tm输出到字符串,结果的格式为"Www Mmm dd hh:mm:ss yyyy",即“周几 月份数 日数 小时数:分钟数:秒钟数 年份数”。函数返回的字符串为静态分配,长度不大于26,与ctime函数共用。函数的每次调用将覆盖该字符串内容。 char* ctime(const time_t* timer); //把日历时间time_t timer输出到字符串,输出格式与asctime函数一样。 size_t strftime(char* s, size_t n, const char* format, const struct tm* tptr); //把分解时间tm转换为自定义格式的字符串,类似于常见的字符串格式输出函数sprintf。 char * strptime(const char* buf, const char* format, struct tm* tptr); //strftime的逆操作,把字符串按照自定义的格式转换为分解时间tm。恩恩……这个函数还是比较有意思的。 其中上面的自定义格式字符串类型有自己的格式命令符,相当多,请读者自己查阅。 下面是我写的代码: //取按下回车前后的系统时间,并计算时间差 1 #include<stdio.h> 运行结果: |
|