函式
<ctime>

strftime

size_t strftime (char* ptr, size_t maxsize, const char* format,                 const struct tm* timeptr );
將時間格式化為字串
format 的內容複製到 ptr 中,並展開其格式說明符,替換為 timeptr 所描述時間對應的相應值,最大複製 maxsize 個字元。

引數

ptr
指向結果 C 字串的儲存區的指標。
maxsize
ptr 中可複製的最大字元數,包括終止的空字元
format
C 字串,包含任意組合的普通字元和特殊格式說明符。這些格式說明符將被函式替換為 timeptr 指定時間的相應值。它們都以百分號 (%) 開始,具體如下:
說明符替換為示例
%a星期縮寫名稱 *週四
%A星期全稱 *星期四
%b月份縮寫名稱 *八月
%B月份全稱 *八月
%c日期和時間表示 *2001年8月23日星期四 14:55:02
%C年份除以 100 並截斷為整數 (00-99)20
%d月份的第幾天,零填充 (01-31)23
%D簡寫 MM/DD/YY 日期,等同於 %m/%d/%y08/23/01
%e月份的第幾天,空格填充 ( 1-31)23
%F簡寫 YYYY-MM-DD 日期,等同於 %Y-%m-%d2001-08-23
%g基於周的年份,最後兩位數字 (00-99)01
%G基於周的年份2001
%h月份縮寫名稱 * (與 %b 相同)八月
%H24 小時制的小時 (00-23)14
%I12 小時制的小時 (01-12)02
%j一年中的第幾天 (001-366)235
%m月份的十進位制數 (01-12)08
%M分鐘 (00-59)55
%n換行符 ('\n')
%p上午或下午的標識下午
%r12 小時制時鐘時間 *02:55:02 下午
%R24 小時制 HH:MM 時間,等同於 %H:%M14:55
%S秒 (00-61)02
%t水平製表符 ('\t')
%TISO 8601 時間格式 (HH:MM:SS),等同於 %H:%M:%S14:55:02
%uISO 8601 星期幾,以週一為 1 (1-7)4
%U週數,以第一個星期日為第一個星期一的第一天 (00-53)33
%VISO 8601 週數 (01-53)34
%w星期幾的十進位制數,以週日為 0 (0-6)4
%W週數,以第一個星期一為第一個星期一的第一天 (00-53)34
%x日期表示 *08/23/01
%X時間表示 *14:55:02
%y年份,最後兩位數字 (00-99)01
%Y年份2001
%zISO 8601 時區與 UTC 的偏移量 (1 分鐘=1,1 小時=100)
如果無法確定時區,則不輸出任何字元
+100
%Z時區名稱或縮寫 *
如果無法確定時區,則不輸出任何字元
CDT
%%一個百分號 (%)%
* 標有星號 (*) 的說明符是區域設定相關的。
注意:黃色行表示 C99 引入的說明符和子說明符。自 C99 起,兩個與區域設定相關的修飾符也可以插入在百分號 (%) 和說明符本身之間,以便在適用時請求替代格式。
修飾符含義適用於
E使用區域設定的替代表示法%Ec %EC %Ex %EX %Ey %EY
O使用區域設定的替代數字符號%Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy
timeptr
指向一個 tm 結構體的指標,該結構體包含一個分解為其各組成部分的日曆時間(請參見 struct tm)。

返回值

如果結果 C 字串的長度(包括終止的空字元)不超過 maxsize,則函式返回複製到 ptr 的總字元數(不包括終止的空字元)。
否則,它返回零,並且 ptr 指向的陣列的內容是不確定的。

相容性

特定的庫實現可能支援額外的說明符或組合。
此處列出的說明符由最新的 C 和 C++ 標準(均於 2011 年釋出)支援,但黃色標註的說明符是在 C99 中引入的(自 C++11 起才被 C++ 實現要求),並且可能不被符合舊標準的庫支援。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* strftime example */
#include <stdio.h>      /* puts */
#include <time.h>       /* time_t, struct tm, time, localtime, strftime */

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  time (&rawtime);
  timeinfo = localtime (&rawtime);

  strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
  puts (buffer);

  return 0;
}

示例輸出

Now it's 03:21PM.


資料競爭

函式訪問 format 指向的陣列和 timeptr 指向的物件。成功時,它還會修改 ptr 指向的陣列中的元素。
併發地更改 locale 設定也可能引入資料競爭。

異常 (C++)

無異常保證:此函式從不丟擲異常。

另見