C 库 - wcsftime() 函数
C 库 wcsftime() 函数将日期和时间信息按照指定格式转换为宽字符串。打印日期时,会使用 wprintf() 函数。该函数用于格式化宽字符输出。它允许用户将一系列宽字符和数值作为标准输出打印。
语法
以下是 C 库 wcsftime() 函数的语法 -
wcsftime(buffer, int_value, L"The current Date: %A, %F %I:%M %p", timeinfo); and wprintf(L"%ls", buffer);
参数
此函数接受以下参数 -
1. buffer:指向宽字符数组第一个元素的指针,输出将存储在该数组中。
2. int_value:要写入的最大宽字符数(缓冲区的大小)。
3.格式:指向以空字符结尾的宽字符串的指针,用于指定转换格式。以下是日期和时间格式中常用的转换说明符列表:
- %A:星期几的完整名称(例如,"星期日/星期一/星期二等")。
- %F:格式为"YYYY-MM-DD"的完整日期(例如,"2024-05-22")。
- %H:小时(24 小时制),以十进制数表示(例如,"19")。
- %M:分钟,以十进制数表示(例如,"30")。
- %I:%M %p:小时(12 小时制)和分钟,后跟 AM/PM 指示符。
- %S:以十进制数表示的秒数(例如,"45")。
4. timeinfo:指向包含本地时间信息的结构体 tm 的指针。
返回类型
程序执行过程中,该函数返回复制到字符串的宽字符总数,不包括终止的空宽字符。如果输出超出最大大小,则函数返回零。
示例 1
以下是一个基本的 C 库程序,使用 wcsftime() 函数以自定义格式显示当前日期和时间。
#include <stdio.h> #include <wchar.h> #include <time.h> int main() { time_t demotime; struct tm* timeinfo; wchar_t buffer[80]; time(&demotime); timeinfo = localtime(&demotime); // 自定义时间格式 wcsftime(buffer, 80, L"The current Date: %A, %F %I:%M %p", timeinfo); wprintf(L"%ls", buffer); return 0; }
输出
执行上述代码后,我们得到以下输出 -
The current Date: Wednesday, 2024-05-22 01:38 PM
示例 2
以下示例使用 various 函数以 24 小时制格式设置本地时间。
#include <stdio.h> #include <wchar.h> #include <locale.h> #include <time.h> int main() { time_t rawtime; struct tm* timeinfo; wchar_t buffer[80]; time(&rawtime); timeinfo = localtime(&rawtime); // 设置语言环境类别 setlocale(LC_ALL, "ja_JP.utf8"); // 自定义格式为 24 小时制 wcsftime(buffer, 80, L": %A%F %H:%M", timeinfo); // 显示结果 wprintf(L"%ls", buffer); return 0; }
输出
执行代码后,我们得到以下输出 -
?????: Wednesday?2024-05-22 13:42
示例 3
要获取今天的日期,wcsftime() 格式设置转换说明符的自定义设置并显示结果。
#include <stdio.h> #include <time.h> #include <wchar.h> int main(void) { struct tm* timeinfo; wchar_t dest[100]; time_t temp; size_t r; temp = time(NULL); timeinfo = localtime(&temp); r = wcsftime(dest, sizeof(dest), L" Today is %A, %b %d. Time: %I:%M %p", timeinfo); printf("%zu is the placed characters in the string: %ls", r, dest); return 0; }
输出
上述代码产生以下输出 -
44 The placed characters in the string: Today is Wednesday, May 22. Time: 02:28 PM