名稱空間
變體
操作

std::wcsftime

來自 cppreference.com
< cpp‎ | chrono‎ | c
 
 
 
 
在標頭檔案 <cwchar> 中定義
std::size_t wcsftime( wchar_t* str, std::size_t count, const wchar_t* format, const std::tm* time );

根據格式字串 format,將給定日曆時間 time 中的日期和時間資訊轉換為以空字元結尾的寬字串 str。最多寫入 count 個寬字元。

目錄

[編輯] 引數

str - 指向用於輸出的 wchar_t 陣列第一個元素的指標
count - 要寫入的最大寬字元數
format - 指向指定轉換格式的以空字元結尾的寬字串的指標
time - 指向待轉換日期和時間資訊的指標

[編輯] 格式字串

格式字串由零個或多個轉換說明符和普通字元(除了%)組成。所有普通字元,包括終止空字元,都將不加修改地複製到輸出字串中。每個轉換說明符以%字元開頭,可選地後跟EO修飾符(如果區域設定不支援則忽略),然後是決定說明符行為的字元。以下格式說明符可用:

轉換
說明符
解釋 使用的欄位
% 寫入字面量 %。完整的轉換說明符必須是 %%
n
(C++11)
寫入換行符
t
(C++11)
寫入水平製表符
Y 年份寫入為十進位制數字,例如 2017 tm_year
EY
(C++11)
以替代表示形式寫入年份,例如在 ja_JP 區域設定中是 平成23年(Heisei 23 年)而不是 2011年 tm_year
y 年份的後兩位數字寫入為十進位制數字(範圍 [00,99] tm_year
Oy
(C++11)
使用替代數字系統寫入年份的後兩位數字,例如在 ja_JP 區域設定中是 十一 而不是 11 tm_year
Ey
(C++11)
年份寫入為區域設定替代日曆週期 %EC 的偏移量(取決於區域設定) tm_year
C
(C++11)
年份的前兩位數字寫入為十進位制數字(範圍 [00,99] tm_year
EC
(C++11)
以區域設定的替代表示形式寫入基準年份(週期)的名稱,例如在 ja_JP 中是 平成(Heisei 時代) tm_year
G
(C++11)
寫入 ISO 8601 基於周的年份,即包含指定周的年份。

在ISO 8601中,周以星期一開始,一年的第一週必須滿足以下要求

  • 包含1月4日
  • 包含一年中的第一個星期四
tm_year, tm_wday, tm_yday
g
(C++11)
寫入 ISO 8601 基於周的年份的後兩位數字,即包含指定周的年份(範圍 [00,99])。

在ISO 8601中,周以星期一開始,一年的第一週必須滿足以下要求

  • 包含1月4日
  • 包含一年中的第一個星期四
tm_year, tm_wday, tm_yday
b 寫入月份縮寫名稱,例如 Oct(取決於區域設定) tm_mon
h
(C++11)
b 的同義詞 tm_mon
B 寫入月份全稱名稱,例如 October(取決於區域設定) tm_mon
m 月份寫入為十進位制數字(範圍 [01,12] tm_mon
Om
(C++11)
使用替代數字系統寫入月份,例如在 ja_JP 區域設定中是 十二 而不是 12 tm_mon
U 年份的週數寫入為十進位制數字(星期日是一週的第一天)(範圍 [00,53] tm_year, tm_wday, tm_yday
OU
(C++11)
使用替代數字系統寫入年份的週數,如 %U 所定義,例如在 ja_JP 區域設定中是 五十二 而不是 52 tm_year, tm_wday, tm_yday
W 年份的週數寫入為十進位制數字(星期一是一週的第一天)(範圍 [00,53] tm_year, tm_wday, tm_yday
OW
(C++11)
使用替代數字系統寫入年份的週數,如 %W 所定義,例如在 ja_JP 區域設定中是 五十二 而不是 52 tm_year, tm_wday, tm_yday
V
(C++11)
寫入 ISO 8601 年份的週數(範圍 [01,53])。

在ISO 8601中,周以星期一開始,一年的第一週必須滿足以下要求

  • 包含1月4日
  • 包含一年中的第一個星期四
tm_year, tm_wday, tm_yday
OV
(C++11)
使用替代數字系統寫入年份的週數,如 %V 所定義,例如在 ja_JP 區域設定中是 五十二 而不是 52 tm_year, tm_wday, tm_yday
年/月中的日
j 年份中的天數寫入為十進位制數字(範圍 [001,366] tm_yday
d 月份中的天數寫入為十進位制數字(範圍 [01,31] tm_mday
Od
(C++11)
使用替代數字系統寫入基於零的月份中的天數,例如在 ja_JP 區域設定中是 二十七 而不是 27

單個字元前面有一個空格。

tm_mday
e
(C++11)
月份中的天數寫入為十進位制數字(範圍 [1,31])。

單個數字前面有一個空格。

tm_mday
Oe
(C++11)
使用替代數字系統寫入基於一的月份中的天數,例如在 ja_JP 區域設定中是 二十七 而不是 27

單個字元前面有一個空格。

tm_mday
星期幾
a 寫入星期幾縮寫名稱,例如 Fri(取決於區域設定) tm_wday
A 寫入星期幾全稱名稱,例如 Friday(取決於區域設定) tm_wday
w 星期幾寫入為十進位制數字,其中星期日是 0(範圍 [0-6] tm_wday
Ow
(C++11)
使用替代數字系統寫入星期幾,其中星期日是 0,例如在 ja_JP 區域設定中是 二 而不是 2 tm_wday
u
(C++11)
星期幾寫入為十進位制數字,其中星期一是 1(ISO 8601 格式)(範圍 [1-7] tm_wday
Ou
(C++11)
使用替代數字系統寫入星期幾,其中星期一是 1,例如在 ja_JP 區域設定中是 二 而不是 2 tm_wday
時、分、秒
H 小時寫入為十進位制數字,24 小時制(範圍 [00-23] tm_hour
OH
(C++11)
使用替代數字系統寫入 24 小時制小時,例如在 ja_JP 區域設定中是 十八 而不是 18 tm_hour
I 小時寫入為十進位制數字,12 小時制(範圍 [01,12] tm_hour
OI
(C++11)
使用替代數字系統寫入 12 小時制小時,例如在 ja_JP 區域設定中是 六 而不是 06 tm_hour
M 分鐘寫入為十進位制數字(範圍 [00,59] tm_min
OM
(C++11)
使用替代數字系統寫入分鐘,例如在 ja_JP 區域設定中是 二十五 而不是 25 tm_min
S 寫入為十進位制數字(範圍 [00,60] tm_sec
OS
(C++11)
使用替代數字系統寫入,例如在 ja_JP 區域設定中是 二十四 而不是 24 tm_sec
其他
c 寫入標準日期和時間字串,例如 Sun Oct 17 04:41:13 2010(取決於區域設定) all
Ec
(C++11)
寫入替代日期和時間字串,例如在 ja_JP 區域設定中使用 平成23年(Heisei 23 年)而不是 2011年 all
x 寫入本地化日期表示(取決於區域設定) all
Ex
(C++11)
寫入替代日期表示,例如在 ja_JP 區域設定中使用 平成23年(Heisei 23 年)而不是 2011年 all
X 寫入本地化時間表示,例如 18:40:20 或 6:40:20 PM(取決於區域設定) all
EX
(C++11)
寫入替代時間表示(取決於區域設定) all
D
(C++11)
等價於 "%m/%d/%y" tm_mon, tm_mday, tm_year
F
(C++11)
等價於 "%Y-%m-%d"(ISO 8601 日期格式) tm_mon, tm_mday, tm_year
r
(C++11)
寫入本地化 12 小時制時間(取決於區域設定) tm_hour, tm_min, tm_sec
R
(C++11)
等價於 "%H:%M" tm_hour, tm_min
T
(C++11)
等價於 "%H:%M:%S"(ISO 8601 時間格式) tm_hour, tm_min, tm_sec
p 寫入本地化 a.m. 或 p.m.(取決於區域設定) tm_hour
z
(C++11)
以 ISO 8601 格式寫入 UTC 偏移量(例如 -0430),如果時區資訊不可用則不寫入任何字元 tm_isdst
Z 寫入取決於區域設定的時區名稱或縮寫,如果時區資訊不可用則不寫入任何字元 tm_isdst

[編輯] 返回值

成功時,寫入到 str 指向的寬字元陣列中的寬字元數,不包括終止空字元 L'\0'。如果字串在完全儲存之前達到了 count,則返回 0,並且內容是未定義的。

[編輯] 示例

#include <ctime>
#include <cwchar>
#include <iostream>
#include <locale>
 
int main()
{
    std::locale::global(std::locale("ja_JP.utf8"));
    std::time_t t = std::time(nullptr);
    wchar_t wstr[100];
    if (std::wcsftime(wstr, 100, L"%A %c", std::localtime(&t)))
        std::wcout << wstr << '\n';
}

可能的輸出

火曜日 2011年12月27日 17時43分13秒

[編輯] 參閱

std::tm 物件轉換為自定義文字表示
(函式) [編輯]
(C++11)
根據指定格式格式化並輸出日期/時間值
(函式模板) [編輯]
C 文件 中的 wcsftime