C++ strftime()

The strftime() function in C++ converts the given date and time from a given calendar time time to a null-terminated multibyte character string according to a format string.

The strftime() function is defined in <ctime> header file.

strftime() prototype

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

The strftime() function takes 4 arguments: str, count, format and time.

The date and time information pointed to by time is converted to a null-terminated multibyte character based on the value of format and is stored in the array pointed to by str. At most count bytes are written.


strftime() Parameters

  • str: Pointer to the first element of the character array to store the result.
  • count: Maximum number of bytes to write.
  • format: Pointer to a null-terminated multibyte character string specifying the format of conversion. The format string consists of conversion specifier (beginning with % and optionally followed by E or O) and other ordinary characters.
    The ordinary characters including the terminating null character are copied as it is to the output string.
    strftime() format specifiers
    Conversion Specifier Description Used Fields
    % Writes the character %
    n Writes newline character
    t Writes horizontal tab character
    Year
    Y Writes 4 digits of year, e.g. 2011 tm_year
    EY Writes 4 digits of year in locale's alternative representation tm_year
    y Writes last 2 digits of year, range [00, 99] tm_year
    Oy Writes the last 2 digits of year in locale's alternative representation tm_year
    Ey Writes year as offset from locale's alternative calendar period %EC (locale-dependent) tm_year
    C Writes first 2 digits of year, range [00,99] tm_year
    EC Writes name of the base year (period) in the locale's alternative representation, tm_year
    G Writes ISO 8601 week-based year, i.e. the year that contains the specified week. tm_year, tm_wday, tm_yday
    g Writes last 2 digits of ISO 8601 week-based year, i.e. the year that contains the specified week (range [00,99]). tm_year, tm_wday, tm_yday
    Month
    b Writes abbreviated month name, e.g. Jan tm_mon
    h Same as b tm_mon
    B Writes full month name, e.g. January tm_mon
    m Writes month as a decimal number, range [01,12] tm_mon
    Om Writes month using the locale's alternative numeric system tm_mon
    Week
    U Writes week of the year as a decimal number from 00 to 53 (Sunday is the first day of the week) tm_year, tm_wday, tm_yday
    OU Writes week of the year as by %U using the alternative numeric system tm_year, tm_wday, tm_yday
    W Writes week of the year as a decimal number from 00 to 53 (Monday is the first day of the week) tm_year, tm_wday, tm_yday
    OW Writes week of the year as by %W using the alternative numeric system tm_year, tm_wday, tm_yday
    V Writes ISO 8601 week of the year (range [01,53]). tm_year, tm_wday, tm_yday
    OV Writes week of the year, as by %V, using the alternative numeric system tm_year, tm_wday, tm_yday
    Day of the year/month
    j Writes day of the year as a decimal number, range [001,366] tm_yday
    d Writes day of the month as a decimal number, range[01,31] tm_mday
    Od Writes day of the month, as by %d, using the alternative numeric system tm_mday
    e Writes day of the month as a decimal number, range[1,31] tm_mday
    Oe Writes day of the month, as by %e, using the alternative numeric system tm_mday
    Day of the week
    a Writes abbreviated weekday name, e.g. Fri (locale dependent) tm_wday
    A Writes full weekday name, e.g. Friday (locale dependent) tm_wday
    w Writes weekday as a decimal number, range [0-6] (Sunday is 0) tm_wday
    Ow Writes weekday as by %w, using the alternative numeric system tm_wday
    u Writes weekday as a decimal number, where Monday is 1 (ISO 8601 format), range [1-7] tm_wday
    Ou Writes weekday as by %u, using the alternative numeric system tm_wday
    Hour, minute, second
    H Writes hour as a decimal number, range [00,23] tm_hour
    OH Writes hour as by %H, using the alternative numeric system tm_hour
    I Writes hour as a decimal number, range[01,12] tm_hour
    OI Writes hour as by %I, using the alternative numeric system tm_hour
    M Writes minute as a decimal number, range [00,59] tm_min
    OM Writes minute as by %M, using the alternative numeric system tm_min
    S Writes second as a decimal number, range [00,60] tm_sec
    OS Writes second as by %S, using the alternative numeric system tm_sec
    Other
    c Writes standard date and time string, e.g. Sun Oct 17 04:41:13 2010 (locale dependent) all
    Ec Writes locale's alternative date and time string all
    x Writes localized date representation (locale dependent) all
    Ex Writes locale's alternative date representation all
    X Writes localized time representation (locale dependent) all
    EX Writes locale's alternative time representation all
    D Equivalent to "%m/%d/%y" tm_mon, tm_mday, tm_year
    F Equivalent to "%Y-%m-%d" tm_mon, tm_mday, tm_year
    r Writes localized 12-hour clock time tm_hour, tm_min, tm_sec
    R Equivalent to "%H:%M" tm_hour, tm_min
    T Equivalent to "%H:%M:%S tm_hour, tm_min, tm_sec
    P Writes localized a.m. or p.m. (locale dependent) tm_hour
    z writes offset from UTC in the ISO 8601 format (e.g. -0545), or no characters if the time zone information is not available tm_isdst
    Z Writes time zone name or abbreviation, or nothing if the time zone information is not available (locale dependent) tm_isdst
  • time: The date and time information to convert.

strftime() Return value

  • On success, the strftime() function returns the number of bytes written into the character array pointed to by str not including the terminating '\0'.
  • If count was reached before the entire string could be stored, 0 is returned and the contents are undefined.

Example: How strftime() function works?

#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;
}

When you run the program, the output will be:

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