當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ strftime()用法及代碼示例


C++ 中的strftime() 函數根據格式字符串將給定日期和時間從給定日曆時間時間轉換為以空值結尾的多字節字符串。

strftime() 函數在<ctime> 頭文件中定義。

strftime()原型

size_t strftime( char* str, size_t count, const char* format, const tm* time );

strftime() 函數采用 4 個參數:str , count , formattime

time 指向的日期和時間信息根據format 的值轉換為以null 結尾的多字節字符,並存儲在str 指向的數組中。最多寫入count 個字節。

參數:

  • str:指向字符數組的第一個元素的指針以存儲結果。
  • count:要寫入的最大字節數。
  • format: 指向指定轉換格式的以空字符結尾的多字節字符串的指針。格式字符串由轉換說明符(以 % 開頭,可選地後跟 E 或 O)和其他普通字符組成。
    包括終止空字符在內的普通字符按原樣複製到輸出字符串。
    strftime() 格式說明符
    轉換說明符 說明 使用領域
    % 寫入字符 %
    n 寫入換行符
    t 寫入水平製表符
    Year
    Y 寫入 4 位年份,例如2011 tm_year
    EY 以語言環境的替代表示形式寫入 4 位年份 tm_year
    y 寫入年份的最後 2 位數字,範圍 [00, 99] tm_year
    Oy 以語言環境的替代表示形式寫入年份的最後 2 位數字 tm_year
    Ey 將年份寫入區域設置的替代日曆期間的偏移量 %EC (locale-dependent) tm_year
    C 寫入年份的前 2 位數字,範圍 [00,99] tm_year
    EC 在語言環境的替代表示中寫入基準年(期間)的名稱, tm_year
    G 寫入 ISO 8601 基於周的年份,即包含指定周的年份。 tm_year、tm_wday、tm_yday
    g 寫入基於 ISO 8601 周的年份的最後 2 位數字,即包含指定周的年份(範圍 [00,99])。 tm_year、tm_wday、tm_yday
    Month
    b 寫入縮寫的月份名稱,例如簡 tm_mon
    h 與 b 相同 tm_mon
    B 寫完整的月份名稱,例如一月 tm_mon
    m 將月份寫入十進製數,範圍 [01,12] tm_mon
    Om 使用區域設置的替代數字係統寫入月份 tm_mon
    Week
    U 將一年中的星期寫為 00 到 53 之間的十進製數(星期日是一周的第一天) tm_year、tm_wday、tm_yday
    OU 使用替代數字係統按 %U 寫入一年中的一周 tm_year、tm_wday、tm_yday
    W 將一年中的星期寫為 00 到 53 之間的十進製數(星期一是一周的第一天) tm_year、tm_wday、tm_yday
    OW 使用替代數字係統按 %W 寫入一年中的一周 tm_year、tm_wday、tm_yday
    V 寫入一年中的 ISO 8601 周(範圍 [01,53])。 tm_year、tm_wday、tm_yday
    OV 使用替代數字係統寫入一年中的星期,如 %V tm_year、tm_wday、tm_yday
    年/月中的哪一天
    j 將一年中的某一天寫為十進製數,範圍 [001,366] tm_yday
    d 將月份中的日期寫為十進製數,範圍[01,31] tm_mday
    Od 使用替代數字係統寫入月份中的某一天,如 %d tm_mday
    e 將月份中的日期寫為十進製數,範圍 [1,31] tm_mday
    Oe 使用替代數字係統寫入月份中的某一天,如 %e tm_mday
    一周中的天
    a 寫下工作日的縮寫名稱,例如周五(取決於地區) tm_wday
    A 寫完整的工作日名稱,例如星期五(取決於地區) tm_wday
    w 將工作日寫為十進製數,範圍 [0-6](星期日為 0) tm_wday
    Ow 使用替代數字係統將工作日寫入 %w tm_wday
    u 將工作日寫入十進製數,其中星期一為 1(ISO 8601 格式),範圍 [1-7] tm_wday
    Ou 使用替代數字係統將工作日寫入 %u tm_wday
    時、分、秒
    H 將小時寫入十進製數,範圍 [00,23] tm_hour
    OH 使用替代數字係統將小時寫入 %H tm_hour
    I 將小時寫入十進製數,範圍[01,12] tm_hour
    OI 使用替代數字係統將小時寫入 %I tm_hour
    M 將分鍾寫入十進製數,範圍 [00,59] tm_min
    OM 按 %M 寫入分鍾,使用替代的數字係統 tm_min
    S 將秒寫為十進製數,範圍 [00,60] tm_sec
    OS 由 %S 寫入第二個,使用替代的數字係統 tm_sec
    Other
    c 寫入標準日期和時間字符串,例如2010 年 10 月 17 日星期日 04:41:13(取決於區域設置) all
    Ec 寫入語言環境的替代日期和時間字符串 all
    x 寫入本地化日期表示(取決於區域設置) all
    Ex 寫入語言環境的替代日期表示 all
    X 寫入本地化時間表示(取決於區域設置) all
    EX 寫入語言環境的替代時間表示 all
    D 相當於"%m/%d/%y" tm_mon、tm_mday、tm_year
    F 相當於"%Y-%m-%d" tm_mon、tm_mday、tm_year
    r 寫入本地化的 12 小時製時間 tm_hour、tm_min、tm_sec
    R 相當於"%H:%M" tm_hour, tm_min
    T 相當於“%H:%M:%S tm_hour、tm_min、tm_sec
    P 寫入本地化的上午或下午(取決於地區) tm_hour
    z 以 ISO 8601 格式(例如 -0545)寫入與 UTC 的偏移量,如果時區信息不可用,則不寫入字符 tm_isdst
    Z 寫入時區名稱或縮寫,如果時區信息不可用則不寫入(取決於區域設置) tm_isdst
  • time :要轉換的日期和時間信息。

返回:

  • 成功時,strftime() 函數返回寫入 str 指向的字符數組的字節數,不包括終止的 '\0'。
  • 如果在可以存儲整個字符串之前達到計數,則返回 0 並且內容未定義。

示例:strftime() 函數如何工作?

#include <ctime>
#include <iostream>
using namespace std;

int main()
{
	time_t curr_time;
	tm * curr_tm;
	char date_string[100];
	char time_string[100];
	
	time(&curr_time);
	curr_tm = localtime(&curr_time);
	
	strftime(date_string, 50, "Today is %B %d, %Y", curr_tm);
	strftime(time_string, 50, "Current time is %T", curr_tm);
	
	cout << date_string << endl;
	cout << time_string << endl;
	
	return 0;
}

運行程序時,輸出將是:

Today is April 21, 2017
Current time is 11:20:42

相關用法


注:本文由純淨天空篩選整理自 C++ strftime()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。