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

📅  最后修改于: 2023-12-03 15:29:41.581000             🧑  作者: Mango

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

strftime()是C和C++中的日期和时间格式化函数。它将一个时间结构体转换为一个C字符串。在这个函数中,你可以指定字符串中每一个指定列表示我们所需要的日期和时间信息,从而自定义最终输出的字符串。

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

int main()
{
    time_t t = time(NULL);
    char str[100];
    strftime(str, sizeof(str), "%Y/%m/%d %H:%M:%S", localtime(&t));
    printf("%s\n", str);
    return 0;
}

上面的代码段输出了 "2021/08/21 16:42:26",是按照指定的格式化参数进行格式化之后的结果。

接下来我们详细说明strftime()函数的各个参数:

char *strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
  • str:指向希望将格式字符串存储在其中的字符数组的指针
  • maxsize:输出缓冲区的大小
  • format:时间格式,定义输出的字符串格式
  • timeptr:一个指向tm结构体的指针,它包含要转换为字符串的时间

strftime()函数中的时间格式(format)有一些标志字符可以用来表示不同的格式,下面是一些常用的表格,更多的格式说明详见man手册

| 符号 | 描述 | | :--------- | :------------------------------------------------------------------------- | | %a/%A | 星期几的缩写/完整名称 | | %b/%B | 月份的缩写/完整名称 | | %c | 日期和时间表示法的完整字符串 | | %d | 十进制表示的每月的第几天,有前导零 | | %e | 与 %d 相同,但不输出前导零 | | %F | %Y-%m-%d 的简写形式,等价于 %Y-%m-%d | | %H | 24 小时格式的小时数,有前导零 | | %I | 12 小时格式的小时数,有前导零 | | %j | 十进制表示的每年的第几天,有前导零 | | %m | 十进制表示的月份,有前导零 | | %M | 十时制表示的分钟数,有前导零 | | %n | 新行符 | | %p | 上午或下午,根据存在的区域设置,如果没有则是空字符串) | | %r | 时间表示法,12 小时格式,格式为 hh:mm:ss [AP]M,GMT 格式 | | %R | 时间表示法,24 小时格式,格式为 HH:mm | | %S | 十进制的秒数,有前导零 | | %t | 水平制表符 | | %T | 时间表示法,24 小时格式,格式为 HH:mm:ss | | %u/%U | 十进制表示的每周的第几天,周日为一周的第一天/十进制表示每年的第几周,以第一个周日做为周的第一天 | | %V/%v | 每年的当前周数/日期的替代格式 (%e-%b-%Y) | | %W | 十进制表示每年的第几周,以周一为第一天 | | %w | 十进制表示的星期几,0 是周日,6 是周六 | | %x | 日期表示法,格式为 mm/dd/yy | | %X | 时间表示法,格式为 HH:mm:ss | | %y/%Y | 两位数字表示的年份/四位数字表示的年份 | | %z/%Z | 时区偏移量/时区缩写 (如:-0500/EST) | | %+ | 日期时间表示法 | | %% | 一个 % 符号 |

strftime()函数返回值:

返回值是字符数组str的长度,如果格式化后的字符串长度大于传递的size,则返回0。