时间函数
原型:
void get_current_time(char *time_str, size_t max_len)
作用:将当前时间格式化为 YYYY-MM-DD HH:MM:SS 的字符串,并存储到 time_str 中。
参数:
time_str:指向字符数组的指针,用于存储生成的时间字符串。
max_len:time_str 的最大容量(防止缓冲区溢出)。
返回值:无(void)。
代码逐行解析
- 获取当前时间戳
c
time_t now;
time(&now);
time_t now:
time_t 是C标准库中用于表示时间的数据类型(通常是整数,表示自 1970-01-01 00:00:00 UTC 以来的秒数)。
time(&now):
调用 time() 函数获取当前时间戳,并存入 now。
2.转换为本地时间结构
struct tm *tm_info;
tm_info = localtime(&now);
struct tm:
是一个结构体,用于保存分解后的时间(年、月、日、时、分、秒等),定义在 <time.h> 中。
localtime(&now):
将 time_t 时间戳转换为本地时区的 tm 结构体。
3.格式化时间为字符串
c
strftime(time_str, max_len, “%Y-%m-%d %H:%M:%S”, tm_info);
strftime:
C标准库函数,用于将 tm 结构体格式化为字符串。
参数:
time_str:输出缓冲区。
max_len:缓冲区大小(避免溢出)。
“%Y-%m-%d %H:%M:%S”:格式化字符串,例如 2023-12-31 23:59:59。
tm_info:提供时间数据的 tm 结构体指针。
格式化符号说明
符号 含义 示例
%Y 四位年份 2023
%m 两位月份(01-12) 12
%d 两位日期(01-31) 31
%H 两位小时(00-23) 23
%M 两位分钟(00-59) 59
%S 两位秒数(00-59) 59
使用示例
#include <stdio.h>
#include <time.h>
void get_current_time(char *time_str, size_t max_len);
int main() {
char time_str[64];
get_current_time(time_str, sizeof(time_str));
printf("Current time: %s\n", time_str);
return 0;
}
输出:
Current time: 2023-12-31 23:59:59
注意事项
缓冲区安全:
max_len 必须足够大(至少 20 字节),否则 strftime 可能截断字符串。
示例中 char time_str[64] 是安全的。
线程安全性:
localtime() 返回指向静态内存的指针,多线程环境下需用 localtime_r()(Linux)或 localtime_s()(Windows)。
时区依赖:
localtime() 的结果受系统时区设置影响。如需UTC时间,改用 gmtime()。
线程安全版本(Linux)
c
void get_current_time(char *time_str, size_t max_len) {
time_t now;
struct tm tm_info;
time(&now);
localtime_r(&now, &tm_info); //可重入版本
strftime(time_str, max_len, "%Y-%m-%d %H:%M:%S", &tm_info);
}