共用方式為


strftime、 、 wcsftime_strftime_l_wcsftime_l

設定時間字串的格式。

語法

size_t strftime(
   char *strDest,
   size_t maxsize,
   const char *format,
   const struct tm *timeptr
);
size_t _strftime_l(
   char *strDest,
   size_t maxsize,
   const char *format,
   const struct tm *timeptr,
   _locale_t locale
);
size_t wcsftime(
   wchar_t *strDest,
   size_t maxsize,
   const wchar_t *format,
   const struct tm *timeptr
);
size_t _wcsftime_l(
   wchar_t *strDest,
   size_t maxsize,
   const wchar_t *format,
   const struct tm *timeptr,
   _locale_t locale
);

參數

strDest
輸出字串。

maxsize
strDest 緩衝區的大小,以字元 (charwchar_t) 為單位。

format
格式控制字串。

timeptr
tm 資料結構。

locale
要使用的地區設定。

傳回值

strftime 會傳回放在 strDest 中的字元數,而 wcsftime 會傳回對應的寬字元數。

如果總字元數 (包括結束 Null) 超個 maxsizestrftimewcsftime 會傳回 0 且無法確定 strDest 的內容。

中的 strDest 字元數等於 中的 format常值字元數,加上任何可透過格式化程式代碼新增至 format 的字元數。 字串的終止 Null 不會計入傳回值中。

備註

wcsftimestrftime式會根據提供的format自變數格式化 tm 中的timeptr時間值,並將結果儲存在緩衝區strDest中。 字串中最多可放置 maxsize 個字元。 如需 結構中 timeptr 欄位的描述,請參閱 asctimewcsftimestrftime 的寬字元對應項,其字串指標引數會指向寬字元字串。 除此之外,這些函式的行為相同。

這個函式會驗證它的參數。 如果 strDestformattimeptr 是 Null 指標,或tm如果尋址timeptr的數據結構無效(例如,如果它包含時間或日期的範圍值超出範圍值),或format字串包含無效的格式代碼,則會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,則函式會傳回 0 並將 errno 設定為 EINVAL

根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態

一般文字常式對應

TCHAR.H 常式 _UNICODE_MBCS 未定義 _MBCS 已定義 _UNICODE 已定義
_tcsftime strftime strftime wcsftime

format 引數是由一或多個程式碼所組成;例如在 printf 中,格式代碼前會加上百分比符號 (%)。 開頭的 % 字元會保持不變地 strDest複製到 。 目前地區設定的 LC_TIME 分類會影響 strftime 的輸出格式 (如需 的詳細資訊LC_TIME,請參閱 setlocale。)和 wcsftimestrftime式會使用目前設定的地區設定。 這些 _strftime_l 函式的和 _wcsftime_l 版本完全相同,不同之處在於它們會採用地區設定做為參數,並使用,而不是目前設定的地區設定。 如需詳細資訊,請參閱 Locale

strftime 式支援這些格式代碼:

代碼 取代字串
%a 地區設定中縮寫的工作日名稱
%A 地區設定中的完整工作日名稱
%b 地區設定中的縮寫月份名稱
%B 地區設定中的完整月份名稱
%c 適用於地區設定的日期和時間表示
%C 年份除以 100,並截斷為整數,以十進制數 (00~99)
%d 以十進位數表示的月份日 (01 - 31)
%D 相當於 %m/%d/%y
%e 以十進位數表示的月份日 (1 - 31),其中單一數位前面有空格
%F 相當於 %Y-%m-%d
%g ISO 8601 周型年份的最後 2 位數為十進制數 (00 - 99)
%G ISO 8601 以十進位數表示的 ISO 8601 周型年份
%h 縮寫月份名稱 (相當於 %b
%H 24 小時格式的小時 (00 - 23)
%I 12 小時格式的小時 (01 - 12)
%j 以十進位數表示的年度日 (001 - 366)
%m 月份為十進位數 (01 - 12)
%M 以十進位數表示的分鐘數 (00 - 59)
%n 換行符 (\n
%p 地區設定的 A.M./P.M. 指標為 12 小時制
%r 地區設定的12小時制時間
%R 相當於 %H:%M
%S 第二個做為十進位數 (00 - 59)
%t 水平製表元 (\t
%T 相當於 %H:%M:%S,ISO 8601 時間格式
%u ISO 8601 工作日做為十進位數 (1 - 7;星期一為 1)
%U 年份的周數為十進位數 (00 - 53),其中第一個星期天是第 1 周的第一天
%V ISO 8601 周數做為十進位數 (00 - 53)
%w 工作日為十進位數 (0 - 6;星期日為 0)
%W 年份的周數為十進位數 (00 - 53),其中第一個星期一是第一周的第一天
%x 地區設定的日期表示法
%X 地區設定的時間表示法
%y 無世紀年份,十進制數 (00 - 99)
%Y 含世紀的年份,以十進位數字表示
%z ISO 8601 格式的 UTC 位移;如果時區未知,則不會有任何字元
%Z 視登錄設定而定,地區設定的時區名稱或時區縮寫;如果時區未知,則不會有任何字元
%% 百分比符號

如同 printf 函式,# 旗標前面可以加上任何格式代碼。 在此情況下,格式代碼的意義會變更如下。

格式化程式碼 意義
%#a%#A%#b%#B、、%#G%#p%#h%#g%#w%#u%#n%#t%#X、、 %#z%#Z%#% 會忽略 # 旗標。
%#c 適用於地區設定的長日期和時間表示法。 例如:「1995 年 3 月 14 日星期二 12:41:29」。
%#x 適用於地區設定的長日期表示法。 例如:「1995 年 3 月 14 日星期二」。
%#d%#D%#e%#F%#H%#I%#j%#V%#y%#W%#m%#M%#r%#R%#S%#T%#U%#Y 拿掉前置零或空格(如果有的話)。

%g%G所產生的 %VISO 8601 周和以周為基礎的年份會使用從星期一開始的一周。 第 1 周是包含 1 月第四天的星期,這是第一周,至少包含一年的四天。 如果今年的第一個星期一是第 2、3 或 4 日,則前天是前一年最後一周的一部分。 這些日子會 %V 由53取代,而且 %g%G 都會由前一年的位數取代。

注意

使用其中一個tm函式搭配從 gmtime傳回的strftime指標時,透過 %Z%z 規範列印的值將無法正確。 這是因為 tm C 標準所指定的結構不包含時區名稱或位移的資訊。 相反地,時區資訊會透過全域變數 _timezone_dstbias填入。

需求

常式 必要的標頭
strftime <time.h>
wcsftime <time.h><wchar.h>
_strftime_l <time.h>
_wcsftime_l <time.h><wchar.h>

_wcsftime_l_strftime_l式Microsoft特定。 如需相容性詳細資訊,請參閱相容性

範例

請參閱 time 的範例。

另請參閱

地區設定
時間管理
字串操作
localeconv
setlocale, _wsetlocale
strcoll 函數
strxfrm、 、 wcsxfrm_strxfrm_l_wcsxfrm_l