6. 时间处理库 - <time.h>
C语言的 <time.h>
库提供了一组函数和类型用于处理时间与日期。这些功能通常用于记录事件或进行时间计算。
6.1. 时间获取与格式化
6.1.1. time
和 clock
-
time
函数:- 作用:返回自Epoch(通常是1970年1月1日)以来的秒数。常用于获取当前时间。
-
特点:返回的是
time_t
类型,可以转换为可读的本地时间格式。
#include <stdio.h> #include <time.h> int main() { time_t current_time; current_time = time(NULL); // 获取当前时间 printf("Current time: %ld\n", current_time); return 0; }
-
[1]time函数的使用:
time(NULL)
用来获取当前的时间,以time_t
类型返回表示时间的秒数。
-
clock
函数:- 作用:用于计算程序执行所用的时间。返回自程序启动以来所用的处理器时间。
- 特点:典型用于性能测试,通过获得处理器消耗的时间来测量代码执行效率。
#include <stdio.h> #include <time.h> int main() { clock_t start, end; double cpu_time_used; start = clock(); // 进行一些操作 for (int i = 0; i < 1000000; i++); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; printf("CPU time used: %f seconds\n", cpu_time_used); return 0; }
-
[2]clock函数的使用:通过计算
clock
函数的返回值差值除以CLOCKS_PER_SEC
,获得执行的CPU时间。
6.1.2. strftime
的使用
-
作用:根据格式字符串规范,格式化时间并存储到字符串中。
-
特点:能够将时间数据转换为具人类可读性的日期和时间格式,支持丰富的格式修饰符。
#include <stdio.h> #include <time.h> int main() { time_t raw_time; struct tm *time_info; char buffer[80]; time(&raw_time); time_info = localtime(&raw_time); strftime(buffer, 80, "Now it's %Y-%m-%d %H:%M:%S", time_info); printf("Formatted time: %s\n", buffer); return 0; }
-
[3]strftime函数的应用:通过
strftime
,可以将time_info
中时间数据格式化为 “%Y-%m-%d %H:%M:%S” 并存储到缓冲区中。
-
[3]strftime函数的应用:通过
6.2. 时间计算
6.2.1. difftime
的使用
-
作用:计算两个时间点之间的时间差,以秒为单位。
-
特点:方便地比较两个
time_t
类型的时间利于获取两个时刻的差。#include <stdio.h> #include <time.h> int main() { time_t start_time, end_time; double seconds; time(&start_time); // 起始时间 // 假设这里有些延迟操作 sleep(2); time(&end_time); // 结束时间 seconds = difftime(end_time, start_time); printf("Elapsed time: %.2f seconds\n", seconds); return 0; }
-
[4]difftime函数的应用:通过将两个
time_t
时间点的差值计算出来,获得期间的秒数。
-
[4]difftime函数的应用:通过将两个
6.2.2. 定时与延时函数:sleep
, usleep
-
sleep
函数:- 作用:使程序暂停执行指定秒数。
- 特点:非精确定时(有可能被中断),常用于简单的延时。
#include <unistd.h> // Linux 上使用 int main() { printf("Wait for 3 seconds...\n"); sleep(3); printf("Done waiting!\n"); return 0; }
-
usleep
函数:- 作用:使程序暂停执行指定的微秒数。
- 特点:提供更为精确的延时控制(微秒级)。
#include <unistd.h> // Unix/Linux 系统 int main() { printf("Wait for 500 milliseconds...\n"); usleep(500000); // 500,000 微秒 = 500 毫秒 printf("Done waiting!\n"); return 0; }
-
[5]sleep和usleep的应用:通过这些函数实现程序的暂停和延时操作,通常用在需要控制时间的场合中。