首页 > 编程笔记

C语言strftime():将时间格式化为字符串

strftime() 是 C语言的一个标准库函数,定义在<time.h>头文件中。

strftime() 函数的功能是根据指定的格式将 struct tm 类型的时间信息转换为一个字符串。该函数的原型如下:
size_t strftime(char* ptr, size_t max, const char* format, const struct tm* tm);

参数

  1. ptr:指向一个字符数组,用来存放格式化后的时间字符串。
  2. maxsize:表示存放到 ptr 数组中的最大字符个数。
  3. format:格式控制,包括普通字符和格式字符,最终格式字符会被 tm 指向的数据取代。格式字符及含义如下表所示。
  4. tm:指向包含日期和时间信息的 struct tm 类型变量。

表:format 格式字符及含义
格式字符 含义 举例
%a 星期几的简写 Thu
%A 星期几的全称 Thursday
%b 月份的简写 Aug
%B 月份的全称 August
%c 标准日期和时间 Sun Aug 01 15:34:07 2010
%d 每月的第几天 01
%H 24 小时制的小时(00~23) 15
%l 12 小时制的小时(01~12) 03
%j 一年中的第几天(0~366) 213
%m 月份(01~12) 08
%M 分钟(00~59) 34
%p AM 或 PM 标志 PM
%S 07
%U 每年的第几周 31
%w 星期几(0~6,0 表示星期日) 0
%W 每年的第几周(星期一作为每周的第 1 天) 30
%x 标准的日期串 Sun Aug 01 2010
%X 标准的时间串 15:34:07
%y 两位数字表示的年份 10
%Y 年份 2010
%z 时区名称 中国标准时间
%% 百分号 %

返回值

如果 ptr 数组中字符串的长度(包括末尾的 '\0')不超过 max,函数返回 ptr 数组中字符的总数量(不包括末尾的 '\0'),否则函数返回 0,并且 ptr 数组中存储的内容是不确定的。

【实例】以下的 C语言示例代码演示了 strftime() 函数将一个 tm 结构体转换为特定格式的字符串,并打印结果。
#include <stdio.h>
#include <time.h>

int main() {
  struct tm time_info;
  char buffer[80];

  // 设置tm结构体为2023年8月17日08:34:56
  time_info.tm_year = 2023 - 1900; // 年份从1900年开始
  time_info.tm_mon = 8 - 1;        // 月份从0开始
  time_info.tm_mday = 17;          // 日
  time_info.tm_hour = 8;           // 小时
  time_info.tm_min = 34;           // 分钟
  time_info.tm_sec = 56;           // 秒
  time_info.tm_isdst = -1;         // 让mktime()自动检测夏令时

  // 使用指定的格式将时间格式化为字符串
  size_t result = strftime(buffer, sizeof(buffer), "现在是 %Y-%m-%d %H:%M:%S", &time_info);

  if (result != 0) {
    printf("%s\n", buffer);
  } else {
    printf("时间格式化失败\n");
  }

  return 0;
}
输出结果为:

现在是 2023-08-17 08:34:56

推荐阅读