📜  C C++中的strftime()函数(1)

📅  最后修改于: 2023-12-03 14:39:37.286000             🧑  作者: Mango

C/C++中的strftime()函数

简介

在 C/C++ 程序开发中,时间日期的处理是一项非常重要的任务。strftime() 函数是一种非常有用的日期时间格式化工具,它可以将时间日期转换为各种不同格式的字符串。本文将介绍 strftime() 函数的用法和基本语法。

基本语法

strftime() 函数有两个参数:第一个参数是要输出的字符串的地址,第二个参数是一个 tm 结构体,它包含了要格式化的时间信息。

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
  • s:字符串输出缓冲区的地址。输出的日期时间格式将被写入该缓冲区。
  • max:缓冲区的大小。
  • format:日期时间输出格式的字符串。该格式字符串由特定的格式占位符组成。这些格式占位符会被 strftime() 函数替换为实际的日期时间数值。下面将介绍一些常用的日期时间格式占位符。
  • tm:指向要格式化的时间的 tm 结构体指针。
常用格式占位符

下面列出了一些常用的格式占位符:

| 格式占位符 | 说明 | 示例输出 | | --- | --- | --- | | %a | 缩写星期几名 | Sun | | %A | 完整星期几名 | Sunday | | %b | 缩写月份名 | Jan | | %B | 完整月份名 | January | | %c | 完整日期时间 | Sun Jan 19 14:12:01 2020 | | %d | 01 至 31 的十进制数,带前导零 | 01 | | %H | 00 至 23 的十进制小时数,带前导零 | 14 | | %I | 01 至 12 的十进制小时数,带前导零 | 02 | | %j | 001 至 366 的十进制天数,带前导零 | 019 | | %m | 01 至 12 的十进制月份,带前导零 | 01 | | %M | 00 至 59 的十进制分钟数,带前导零 | 12 | | %p | AM 或 PM | PM | | %S | 00 至 59 的十进制秒数,带前导零 | 01 | | %U | 一年中第几周,从第一个星期日开始计数 | 03 | | %w | 一周中的第几天,从星期日开始计数 | 0 | | %W | 一年中第几周,从第一个星期一开始计数 | 02 | | %x | 日期 | 01/19/20 | | %X | 时间 | 14:12:01 | | %y | 两位数的年份 | 20 | | %Y | 四位数的年份 | 2020 | | %Z | 时区 | CST | | %% | 百分号 | % |

示例代码

下面是一个示例代码,它演示了如何使用 strftime() 函数将时间日期格式化为一个字符串并输出。

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

int main() {
    time_t now;
    struct tm *tm;
    char buff[100];

    time(&now);
    tm = localtime(&now);

    strftime(buff, 100, "%Y-%m-%d %H:%M:%S", tm);
    printf("当前时间是 %s\n", buff);

    return 0;
}

输出结果如下所示:

当前时间是 2021-10-20 10:30:00
总结

strftime() 函数是日期时间格式化的重要工具,它使用格式占位符将时间日期转换为各种不同格式的字符串。在程序开发中,了解如何使用 strftime() 函数可以大大简化时间日期处理的工作。