述说C++日期格式参数说明(C++日期格式参数详解)
原创
一、引言
在C++中处理日期和时间时,我们通常会使用标准库中的<ctime>
和<chrono>
头文件。这些库提供了充足的功能来处理日期和时间。在格式化日期和时间时,C++提供了多种参数来控制输出格式,这些参数通常与strftime
函数或std::put_time
函数一起使用。本文将详细解释C++中日期格式的参数及其用法。
二、strftime函数
strftime
函数是C标准库中的一个函数,用于将时间格式化为字符串。该函数原型如下:
char *strftime(char *s, size_t max, const char *format, const struct tm *tm);
其中:
s
:指向用于存储格式化后字符串的数组的指针。max
:指定数组s
的最大长度。format
:指向包含格式化指令的字符串的指针。tm
:指向包含时间信息的tm
结构体的指针。
三、日期格式参数详解
下面是strftime
函数中常用的日期格式参数及其说明:
3.1 百分号(%)
百分号用作特殊字符的前缀,用于引入转换说明符。
3.2 年份
%Y
:四位数的年份(例如,2023)。%y
:两位数的年份(例如,23)。
3.3 月份
%m
:月份(01-12)。%b
:缩写月份名(例如,Jan)。%B
:完整月份名(例如,January)。
3.4 日
%d
:月份中的日(01-31)。%e
:月份中的日,空格前导(1-31)。%a
:缩写星期名(例如,Sun)。%A
:完整星期名(例如,Sunday)。
3.5 时间
%H
:24小时制的小时数(00-23)。%I
:12小时制的小时数(01-12)。%M
:分钟数(00-59)。%S
:秒数(00-60)。%p
:本地AM/PM。
3.6 时区
%z
:数字时区(例如,-0800)。%Z
:时区名称(如果存在)。
3.7 其他
%c
:本地日期和时间。%D
:美国格式日期(mm/dd/yy)。%F
:ISO 8601日期(yyyy-mm-dd)。%R
:24小时制的时间(HH:MM)。%r
:12小时制的时间(HH:MM:SS AM/PM)。%T
:24小时制的时间(HH:MM:SS)。%X
:本地时间,不包括日期。%x
:本地日期,不包括时间。
四、示例
以下是一个使用strftime
函数的示例,演示怎样格式化日期和时间:
#include
#include
int main() {
// 获取当前时间
std::time_t t = std::time(nullptr);
// 将time_t演化为tm结构体
std::tm tm = *std::localtime(&t);
// 创建一个字符数组用于存储格式化后的时间
char buffer[100];
// 格式化日期和时间
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm);
// 输出格式化后的日期和时间
std::cout << "Current time: " << buffer << std::endl;
return 0;
}
上述代码将输出当前时间,格式为“年-月-日 时:分:秒”。
五、std::put_time函数
从C++11起初,C++标准库引入了<chrono>
头文件,提供了std::put_time
函数,用于格式化时间。该函数的使用如下:
#include
#include
#include
int main() {
// 获取当前系统时间
auto now = std::chrono::system_clock::now();
// 演化为time_t
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
// 演化为tm结构体
std::tm now_tm = *std::localtime(&now_c);
// 输出格式化后的日期和时间
std::cout << "Current time: "
<< std::put_time(&now_tm, "%Y-%m-%d %H:%M:%S")
<< std::endl;
return 0;
}
上述代码同样输出当前时间,但使用了C++11的<chrono>
库。
六、总结
在C++中,日期和时间的格式化是一个常用的功能,通过使用strftime
函数和<chrono>
库的std::put_time
函数,我们可以轻松地控制日期和时间的输出格式。了解并掌握这些日期格式参数,可以帮助我们更好地处理和展示时间信息。