C语言时间格式化函数strftime()详解与示例

桃夭
桃夭
发布时间:2026-10-16 | 6人浏览过
原创

本文深入解析C语言中的`strftime`函数,该函数是标准库``中用于将本地时间转换为格式化字符串的核心工具。文章详细说明了函数的四个关键参数,整理了常用的格式化符号(如%Y表示年份,%m表示月份等)以及`struct tm`结构体的字段含义,并通过一个完整的C语言代码示例,展示如何获取当前系统时间并将其格式化为“年-月-日 时:分:秒”的标准形式。

strftime函数概述

在C语言开发中,经常需要将底层的时间戳或时间结构体转换为用户可读的字符串格式。`strftime`函数正是为此设计的,它接受一个时间结构体指针和一个格式化控制字符串,输出符合特定规范的日期时间字符串。

函数原型与参数详解

`strftime`位于``头文件中,其主要功能是将指向`tm`结构体的时间信息转换为字符数组。其函数原型定义如下:

size_t strftime(char *strDest,
                size_t maxsize,
                const char *format,
                const struct tm *timeptr);

调用该函数需要准备以下四个参数:

  • strDest:指向目标字符数组的指针,用于存放生成的格式化字符串。
  • maxsize:缓冲区 strDest 的最大长度,防止写入溢出。
  • format:格式化字符串,由普通字符和以百分号(%)开头的特殊格式说明符组成。
  • timeptr:指向 struct tm 结构的指针,包含待格式化的时间信息。

第1步:掌握常用格式化说明符

格式化字符串中的特殊符号决定了最终输出的样式。以下是 `strftime` 支持的最常用说明符列表:

说明符 替换为 示例
%a 缩写的星期几名称 Sun
%A 完整的星期几名称 Sunday
%b 缩写的月份名称 Mar
%B 完整的月份名称 March
%c 日期和时间表示法 (locale默认) Sun Jan 23 02:56:02 2022
%d 一月中的第几天 (01-31) 19
%H 24小时格式的小时 (00-23) 14
%I 12小时格式的小时 (01-12) 05
%j 一年中的第几天 (001-366) 231
%m 十进制月份 (01-12) 08
%M 分钟 (00-59) 55
%p AM 或 PM 指示符 PM
%S 秒 (00-61, 允许闰秒) 02
%U 一年中的第几周 (首日为周日) 33
%w 十进制星期几 (0=Sunday, 6=Saturday) 4
%W 一年中的第几周 (首日为周一) 34
%x 日期表示法 (locale默认) 08/19/12
%X 时间表示法 (locale默认) 02:50:06
%y 两位数的年份 (00-99) 01
%Y 四位数的年份 2012
%Z 时区名称或缩写 CDT
%% 字面上的百分号 (%) 符号 %

第2步:理解 struct tm 结构体

在进行格式化前,需要填充或使用 struct tm 结构体。该结构体定义了时间的各个组成部分,具体如下:

struct tm {
   int tm_sec;    /* 秒 - 范围从 0 到 59 */
   int tm_min;    /* 分 - 范围从 0 到 59 */
   int tm_hour;   /* 时 - 范围从 0 到 23 */
   int tm_mday;   /* 一月中的第几天 - 范围从 1 到 31 */
   int tm_mon;    /* 月份 - 范围从 0 到 11 (0代表1月) */
   int tm_year;   /* 自1900起的年数 */
   int tm_wday;   /* 一周中的第几天 - 范围从 0 到 6 (0代表周日) */
   int tm_yday;   /* 一年中的第几天 - 范围从 0 到 365 */
   int tm_isdst;  /* 夏令时标志 */
};
注意:tm_mon 的值是从0开始的(即1月为0),而 tm_year 是自1900以来的年份差值。在实际应用中,通常直接调用 localtime() 函数自动填充此结构体。

实际应用示例

下面通过一个完整的C语言程序,演示如何获取当前系统时间,并使用 strftime 将其格式化为“YYYY-MM-DD HH:MM:SS”的形式。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	time_t now_time;
	struct tm *info;
	char buffer[80];

	/* 1. 获取当前日历时间 */
	time(&now_time);

	/* 2. 将日历时间转换为本地时间和 struct tm 结构 */
	info = localtime(&now_time);

	/* 3. 使用 strftime 进行格式化 */
	/* "%Y-%m-%d %H:%M:%S" 对应:年-月-日 时:分:秒 */
	strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", info);

	/* 4. 输出结果 */
	printf("格式化的日期和时间 : %s \n", buffer);

	return 0;
}

运行结果

编译并运行上述代码后,终端将打印出类似以下的实时时间字符串:

从输出可以看出,生成的字符串严格遵循了 strftime 中定义的格式模板。这种方法比手动拼接字符串更加安全且易于维护,是处理日志记录、文件命名及界面显示时间的基础手段。

简要总结

strftime 是C语言处理时间展示的重要工具。开发者只需关注格式化字符串的编写以及确保目标缓冲区足够大,即可轻松获得各种自定义格式的时间文本。关键在于理解 struct tm 各字段的物理含义,并通过 localtime 等辅助函数正确获取时间源数据。

以上就是C语言时间格式化函数strftime()的详细教程,更多关于C语言标准库使用的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表