C语言strftime()函数 (格式化时间)(注意第二个参数size_t maxsize一定要大于第三个参数const char *format指向字符串的长度)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言strftime()函数 (格式化时间)(注意第二个参数size_t maxsize一定要大于第三个参数const char *format指向字符串的长度)相关的知识,希望对你有一定的参考价值。

需包含:C 标准库 - <time.h>

描述

C 库函数 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) 根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。

声明

下面是 strftime() 函数的声明。

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

参数

  • str – 这是指向目标数组的指针,用来复制产生的 C 字符串。
  • maxsize – 这是被复制到 str 的最大字符数。
  • format – 这是 C 字符串,包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由函数替换为表示 tm 中所指定时间的相对应值。格式说明符是:
说明符	替换为												实例
%a		缩写的星期几名称										Sun
%A		完整的星期几名称										Sunday
%b		缩写的月份名称										Mar
%B		完整的月份名称										March
%c		日期和时间表示法										Sun Aug 19 02:56:02 2012
%d		一月中的第几天(01-3119
%H		24 小时格式的小时(00-2314
%I		12 小时格式的小时(01-1205
%j		一年中的第几天(001-366231
%m		十进制数表示的月份(01-1208
%M		分(00-5955
%p		AM 或 PM 名称										PM
%S		秒(00-6102
%U		一年中的第几周,以第一个星期日作为第一周的第一天(00-5333
%w		十进制数表示的星期几,星期日表示为 00-64
%W		一年中的第几周,以第一个星期一作为第一周的第一天(00-5334
%x		日期表示法											08/19/12
%X		时间表示法											02:50:06
%y		年份,最后两个数字(00-9901
%Y		年份													2012
%Z		时区的名称或缩写										CDT
%%		一个 % 符号											%
  • timeptr – 这是指向 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                */
   int tm_year;        /* 自 1900 起的年数                */
   int tm_wday;        /* 一周中的第几天,范围从 0 到 6                */
   int tm_yday;        /* 一年中的第几天,范围从 0 到 365                    */
   int tm_isdst;       /* 夏令时                        */    
;

返回值

如果产生的 C 字符串小于 size 个字符(包括空结束字符),则会返回复制到 str 中的字符总数(不包括空结束字符),否则返回零。

实例

下面的实例演示了 strftime() 函数的用法。

#include <stdio.h>
#include <time.h>
 
int main ()

   time_t rawtime;
   struct tm *info;
   char buffer[80];
 
   time( &rawtime );
 
   info = localtime( &rawtime );
 
   strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
   printf("格式化的日期 & 时间 : |%s|\\n", buffer );
  
   return(0);

运行结果:格式化的日期 & 时间 : |2018-09-19 08:59:07|

使用☞坑(注意第二个参数size_t maxsize一定要大于第三个参数const char *format指向字符串的长度)

测试代码:(可在VS上运行)

#pragma warning(disable : 4996)
#include <time.h> 
#include <stdio.h> 
#include <string.h>
#include <stdio.h>

//arnold add 获取格式化时间
void get_format_time(char* format_time, size_t size) 
	time_t nowtime;
	struct tm* timeinfo;
	time(&nowtime);
	timeinfo = localtime(&nowtime);
	//printf("%ld\\n", sizeof(format_time));	//8(64位系统指针大小为8个字节)
	//printf("%ld\\n", sizeof(*timeinfo));	//56
	//strftime(format_time, sizeof(format_time), "%Y%m%d%H%M%S", timeinfo);	//失败案例1
	//strftime(format_time, 14, "%Y%m%d%H%M%S", timeinfo);	//失败案例2
	strftime(format_time, 19, "ss%Y%m%d%H%M%Sss", timeinfo);	//ss%Y%m%d%H%M%Sss长度18,所以第二个参数一定要大于18(当小于等于18时,format_time为空字符串,当大于18,输出才正常)


int main() 
	//arnold add:将时间作为视频名
	char format_time[50] =  0 ;
	get_format_time(format_time, sizeof(format_time));

	/*
		int i =0;
		while (format_time[i] != '\\0')
		
			printf("%c\\n", format_time[i]);
			i++;
		
	 */
	printf("format_time: %s\\n", format_time);

	strcat(format_time, ".mp4");	//字符串拼接
	char* output_file = format_time;
	printf("%s\\n", output_file);
	return 0;

如:
(当第二个参数为14)


(当第二个参数为15)

参考文章:C 库函数 - strftime()

以上是关于C语言strftime()函数 (格式化时间)(注意第二个参数size_t maxsize一定要大于第三个参数const char *format指向字符串的长度)的主要内容,如果未能解决你的问题,请参考以下文章

python中datetime的常用操作

linux strftime函数格式化时间为24/12小时制

C语言 "time.h" 时间日期操作

时间格式化函数strftime

localtime_r 的 C++11 替代方案

python时间处理,datetime中的strftime/strptime