size_t strftime(char *buff,
                size_t maxSize,
                const char *format,
                const struct tm *tmp)
1.0、参考
1.1、此函数的作用

tmp按照format格式化后,放到buff中。

1.2、参数说明

char *buff是格式化后的字符串存放的地方。

size_t maxSize表示最多占用char *buff的前maxSize个字节。

const char *format是格式化的字符串,可包含如下格式:

格式说明en_US示例zh_CN示例
%a星期几的简称Wed
%A星期几的全称Wednesday星期三
%Y4位20192019
%y后2位1919
%G周年20192019
%g周年后2位1919
%C前2位2020
%m的几月0303
%b几月的简称Mar3
%h等同于%bMar3
%B几月的全称March三月
%d的第几天33
%e的第几天,小于10的数字前面补00303
%H24小时制,时钟2位数1515
%I12小时制,时钟2位数0303
%M分钟2位数0303
%S秒钟2位数0303
%s1970-00-00 00:00:00到现在的秒数15845212531584521253
%p上午和下午的标识,大写AMPM上午下午
%P上午和下午的标识,小写ampmAP
%%输出%%%
%t输出tab
%n换行
%c相当于%a %d/%m %H:%M:%S %YWed Mar 18 14:10:52 2020三 3/18 14:06:33 2020
%D相当于%m/%e/%C03/18/2003/18/20
%F相当于%C-%m-%e20-18-0320-18-03
%v相当于%e-%b-%Y18-Mar-202018- 3-2019
%R相当于%H:%M15:0015:00
%T相当于%H:%M:%S15:00:2315:00:23
%r相当于%I:%M:%S %p04:32:32 PM04:32:32 下午

struct tm的定义:

struct tm {
    int tm_sec;   /* seconds [0,60] */
    int tm_min;   /* minutes [0,59] */
    int tm_hour;  /* hours   [0,23]*/
    int tm_mday;  /* day of the month [1,31] */
    int tm_mon;   /* month   [0,11] */
    int tm_year;  /* year since 1900 */
    int tm_wday;  /* day of the week [0,6] (Sunday =0) */
    int tm_yday;  /* day in the year [0,365] */
    int tm_isdst; /* daylight saving time */
};
1.3、返回值说明

size_t的定义:

typedef long unsigned int __darwin_size_t;
typedef __darwin_size_t size_t;

返回实际占用了buff的大小。

1.4、使用示例
#include <stdio.h>
#include <time.h>
#include <locale.h>

int main() {
    setlocale(LC_ALL, "zh_CN.UTF-8");
  //setlocale(LC_ALL, "en_US.UTF-8");

    time_t tt = time(NULL);
    struct tm *tms = localtime(&tt);

    char buff[30] = {0};
    strftime(buff, sizeof(buff), "%Y-%m-%d %H:%M:%S", tms);

    printf("现在是当地时间:%s\n", buff);

    return 0;
}

使用gcc命令编译 ⤵︎

gcc -o test_time test.c

运行结果如下 ⤵︎

现在是当地时间:2019-03-18 12:57:34