📅  最后修改于: 2023-12-03 14:59:47.316000             🧑  作者: Mango
C++ strftime()函数是一个字符串格式化函数,主要用于将时间日期等时间节点转换成指定格式的字符串。该函数常用于文件名、时间戳以及日志记录等场景。
size_t strftime(char* str, size_t count, const char* format, const struct tm* timeptr);
该函数的参数及说明如下:
str : 存储格式化后的结果的字符数组。函数将把格式化后的内容储存到该数组中。该数组至少需要分配 $count$ 个字符。
count : str 的可用大小。
format : strftime() 函数需要输出的格式化字符串。
timeptr :指向tm结构体的指针(来自于<time.h>头文件),包含了需要转换为字符数组的日期时间信息。
strftime()函数中的格式化符号用于指定输出的日期时间格式,常用的格式化符号如下:
符号 | 描述 ----|---- %a | 缩写形式的星期几名称(例如:Sun、Mon、Tue、Wed、Thu、Fri、Sat) %A | 全称的星期几名称(例如:Sunday、Monday、Tuesday、Wednesday、Thursday、Friday、Saturday) %b | 缩写形式的月份名称(例如:Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec) %B | 全称的月份名称(例如:January、February、March、April、May、June、July、August、September、October、November、December) %c | 日期和时间的描述(例如:Sun Aug 13 14:35:05 2017) %d | 一个月中的第几天(例如,01 到 31) %H | 24小时格式的小时数(例如,00 到 23) %I | 12小时格式的小时数(例如,01 到 12) %j | 一年中的第几天(001 到 366) %m | 一个年中的第几个月(01 到 12) %M | 分钟数(00 到 59) %p | 上午或下午(例如:AM、PM) %S | 秒数(00 到 59) %U | 一年中的第几个星期(取值从0开始,周日被视为每周第一天)(00 到 53) %w | 一个星期中的第几天(取值从0开始,周日为第0天)(0 到 6) %W | 一年中的第几个星期(取值从0开始,周一被视为每周第一天)(00 到 53) %x | 本地的日期表示(例如:08/13/2017) %X | 本地的时间表示(例如:14:35:05) %Y | 四位数的年份(例如:2017) %Z | 时区名称或缩写(例如:CST、UTC) %% | 一个%字符
#include <iostream>
#include <time.h>
using namespace std;
int main() {
time_t t = time(nullptr);
struct tm tm_now;
localtime_s(&tm_now, &t);
char s[32];
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", &tm_now);
cout << s << endl;
return 0;
}
以上样例用当前系统时间生成格式化的时间字符串。输出结果将类似于:"2017/08/13 14:35:05"。
strftime()函数是一个线程安全的函数。
在使用该函数时,需要设置tm结构体中的所有时间信息,否则输出结果将不正确。
在 Windows 环境下,需要使用_localtime_s()函数代替 localtime() 函数,以保证线程安全性。