名稱空間
變體
操作

wcsftime

來自 cppreference.com
< c‎ | 時間
在標頭檔案 <wchar.h> 中定義
size_t wcsftime( wchar_t* str, size_t count, const wchar_t* format, const struct tm* time );
(自 C95 起)

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

目錄

[編輯] 引數

str - 指向用於輸出的 wchar_t 陣列的第一個元素的指標
count - 要寫入的最大寬字元數
format - 指向以空字元結尾的寬字串的指標,指定轉換格式

[編輯] 格式字串

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[編輯] 返回值

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

[編輯] 示例

#include <locale.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
 
int main(void)
{
    wchar_t buff[40];
    struct tm my_time =
    {
        .tm_year = 112, // = year 2012
        .tm_mon = 9,    // = 10th month
        .tm_mday = 9,   // = 9th day
        .tm_hour = 8,   // = 8 hours
        .tm_min = 10,   // = 10 minutes
        .tm_sec = 20    // = 20 secs
    };
 
    if (wcsftime(buff, sizeof buff, L"%A %c", &my_time))
        printf("%ls\n", buff);
    else
        puts("wcsftime failed");
 
    setlocale(LC_ALL, "ja_JP.utf8");
 
    if (wcsftime(buff, sizeof buff, L"%A %c", &my_time))
        printf("%ls\n", buff);
    else
        puts("wcsftime failed");
}

輸出

Sunday Sun Oct  9 08:10:20 2012
日曜日 2012年10月09日 08時10分20秒

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 7.29.5.1 wcsftime 函式 (p: 待定)
  • C17 標準 (ISO/IEC 9899:2018)
  • 7.29.5.1 wcsftime 函式 (p: 230-231)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.29.5.1 wcsftime 函式 (p: 439-440)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.24.5.1 wcsftime 函式 (p: 385-386)

[編輯] 另請參閱

tm 物件轉換為自定義文字表示形式
(函式) [編輯]
C++ 文件 中的 wcsftime