更换空间对网站的影响,如何创建私人网站,绿色企业网站模板,深圳做网站要多少在Linux系统中#xff0c;gettimeofday() 和 localtime() 是两个常用的时间处理函数#xff0c;分别用于获取高精度时间戳和将时间戳转换为本地时间。以下是它们的概念和使用案例的详细说明#xff1a; 1. gettimeofday() 函数
概念
功能#xff1a;获取当前时间#xf…在Linux系统中gettimeofday() 和 localtime() 是两个常用的时间处理函数分别用于获取高精度时间戳和将时间戳转换为本地时间。以下是它们的概念和使用案例的详细说明 1. gettimeofday() 函数
概念
功能获取当前时间自 Epoch 即 1970-01-01 00:00:00 UTC 起的秒数和微秒数及系统的时区信息。头文件#include sys/time.h原型int gettimeofday(struct timeval *tv, struct timezone *tz);参数 tv指向 struct timeval 的指针用于存储时间值。struct timeval {time_t tv_sec; // 秒数suseconds_t tv_usec; // 微秒数0-999,999
};tz历史遗留参数已废弃应设为 NULL。 返回值成功返回 0失败返回 -1。
使用案例
示例1计算代码执行时间
#include sys/time.h
#include stdio.hint main() {struct timeval start, end;gettimeofday(start, NULL);// 模拟耗时操作例如循环for (int i 0; i 1000000; i);gettimeofday(end, NULL);// 计算时间差微秒long seconds end.tv_sec - start.tv_sec;long micros ((seconds * 1000000) end.tv_usec) - start.tv_usec;printf(耗时: %ld 微秒\n, micros);return 0;
}示例2生成精确时间戳
#include sys/time.h
#include stdio.hint main() {struct timeval tv;gettimeofday(tv, NULL);printf(时间戳: %ld秒 %d微秒\n, tv.tv_sec, tv.tv_usec);return 0;
}注意事项
精度问题tv_usec 的实际精度取决于系统实现可能无法达到真正的微秒级。替代函数clock_gettime()支持纳秒级精度需指定 CLOCK_REALTIME 等时钟类型。 2. localtime() 函数
概念
功能将 time_t 类型的时间戳转换为本地时间的结构化表示考虑时区。头文件#include time.h原型struct tm *localtime(const time_t *timer);参数timer 指向 time_t 类型的时间戳。返回值指向静态分配的 struct tm 的指针包含以下成员struct tm {int tm_sec; // 秒0-59int tm_min; // 分0-59int tm_hour; // 时0-23int tm_mday; // 日1-31int tm_mon; // 月0-11需加1int tm_year; // 年自1900年起int tm_wday; // 星期0-60周日int tm_yday; // 年中的第几天0-365int tm_isdst; // 夏令时标志
};使用案例
示例1显示当前本地时间
#include time.h
#include stdio.hint main() {time_t rawtime;struct tm *timeinfo;time(rawtime); // 获取当前时间戳timeinfo localtime(rawtime); // 转换为本地时间printf(当前时间: %d-%02d-%02d %02d:%02d:%02d\n,timeinfo-tm_year 1900, // 年份需加1900timeinfo-tm_mon 1, // 月份需加1timeinfo-tm_mday,timeinfo-tm_hour,timeinfo-tm_min,timeinfo-tm_sec);return 0;
}示例2格式化时间输出
使用 strftime() 进一步格式化时间
#include time.h
#include stdio.hint main() {time_t rawtime;struct tm *timeinfo;char buffer[80];time(rawtime);timeinfo localtime(rawtime);strftime(buffer, 80, %Y-%m-%d %H:%M:%S, timeinfo);printf(格式化时间: %s\n, buffer);return 0;
}注意事项
线程安全localtime() 返回静态内存指针多线程中应改用 localtime_r()。struct tm *localtime_r(const time_t *timer, struct tm *result);时区依赖转换结果受系统时区设置影响可通过 setenv(TZ, 时区名, 1) 调整。 3. 结合使用案例
将 gettimeofday() 的高精度时间与 localtime() 的本地时间转换结合
#include sys/time.h
#include time.h
#include stdio.hint main() {struct timeval tv;gettimeofday(tv, NULL);time_t rawtime tv.tv_sec;struct tm *timeinfo localtime(rawtime);printf(精确时间: %04d-%02d-%02d %02d:%02d:%02d.%06ld\n,timeinfo-tm_year 1900,timeinfo-tm_mon 1,timeinfo-tm_mday,timeinfo-tm_hour,timeinfo-tm_min,timeinfo-tm_sec,tv.tv_usec);return 0;
}总结
gettimeofday()获取高精度时间戳秒微秒适合性能分析或日志记录。localtime()将时间戳转换为易读的本地时间结构需注意线程安全和时区配置。替代方案需高精度时用 clock_gettime()需线程安全时用 localtime_r()。