📅  最后修改于: 2023-12-03 15:13:57.967000             🧑  作者: Mango
C++ 中的 wcsftime()
函数是对日期和时间格式化输出的函数。它能够将时间结构体 struct tm
转化为一个格式化的字符串。在 C++ 11 标准之前, C++ 标准库中并没有提供任何日期和时间处理函数。尽管 strftime() 函数在 C++ 标准函数库中存在,但它不能处理 Unicode 和宽字符串。
wcsftime()
函数的定义如下:
size_t wcsftime(wchar_t* str, size_t maxsize, const wchar_t* format, const struct tm* timeptr);
str
:指向保存生成的宽字符字符串的地址。maxsize
:要生成的宽字符字符串的最大长度。format
:一个宽字符串,指定了所需的日期和时间格式。timeptr
:一个指向包含日期和时间的结构体 tm
的指针。下面是一个例子,演示如何使用 wcsftime()
函数输出当前时间的本地格式:
#include <iostream>
#include <ctime>
#include <cwchar>
using namespace std;
int main() {
time_t now = time(0);
tm *local = localtime(&now);
wchar_t buffer[80];
wmemset(buffer, 0, 80);
wcsftime(buffer, 80, L"%Y-%m-%d %H:%M:%S", local);
wcout << buffer << endl;
return 0;
}
这个例子中,我们获取当前时间并将它转换为 tm
结构体,然后将 buffer
初始化为全零空间,最后使用 wcsftime()
将时间格式化输出。
输出结果如下:
2022-08-16 00:30:51
在上面的格式化字符串中,%Y
、%m
、%d
、%H
、%M
和 %S
等是格式化占位符:
%Y
:年份(如:2022)。%m
:月份(01-12)。%d
:日期(01-31)。%H
:小时(00-23)。%M
:分钟(00-59)。%S
:秒钟(00-59)。你还可以使用下列占位符来打印上午 / 下午(AM/PM)格式:
%p
:打印上午 / 下午。例如,上午时,%p
会被替换成 "AM";而下午时,%p
会替换成 "PM"。
例子:
#include <iostream>
#include <ctime>
#include <cwchar>
using namespace std;
int main() {
time_t now = time(0);
tm *local = localtime(&now);
wchar_t buffer[80];
wmemset(buffer, 0, 80);
wcsftime(buffer, 80, L"%Y-%m-%d %I:%M:%S %p", local);
wcout << buffer << endl;
return 0;
}
这个例子中,%I
占位符代表小时,使用12小时制输出,并且我们增加了 %p
占位符,它会根据时间的前后来显示出 "AM" 或者 "PM" 。
输出结果如下:
2022-08-17 07:52:03 PM
总的来说,wcsftime()
是一个非常方便的函数,它让我们可以把时间和日期按照我们自己的需求输出,并且同时支持 Unicode 和宽字符串。