The manipulator hi(put_time) tt(std::put_time(std::tm const *specs, char const
*fmt)) can be used to insert time specifications into tt(std::ostream)
objects.

Time specifications are provided in tt(std::tm) objects, and the way the time
should be displayed is defined by the emi(format string) tt(fmt).

Starting with a tt(chrono::time_point) the following steps must be performed
to insert the time point's time into a tt(std::ostream):
    itemization(
    it() Obtain a tt(time_point) (e.g.: tt(system_clock{}.now()));

    it() Pass the time point to the clock's tt(to_time_t) function, saving the
returned tt(time_t) value:
        verb(time_t secs = system_clock::to_time_t( system_clock{}.now() );)

it() Pass tt(sec's) address to either hi(localtime)tt(std::localtime) or
hi(gmtime)tt(std::gmtime). These functions return tt(std::tm) structs
containing the required time components expressed in, respectively, the
computer's local time or GMT;

    it() Pass the return value of either tt(localtime) or tt(gmtime) together
with a format string (e.g., tt("%c")) to tt(put_time), inserting it into an
tt(std::ostream):
        verb(                // displays, e.g., Mon Nov  4 21:34:59 2019
time_t secs = system_clock::to_time_t( system_clock{}.now() );
std::cout << std::put_time(std::localtime(&secs), "%c") << '\n';)

)

A simple function returning tt(put_time's) return value and expecting a
tt(time_point) and format string can be defined which handles the above two
statements. E.g., (omitting the tt(std::) and tt(std::chrono::) specifications
for brevity):
        verb(    auto localTime(time_point<system_clock> const &tp, char const *fmt)
    {
        time_t secs = system_clock::to_time_t( tp );
        return put_time(localtime(&secs), fmt);
    }
                // used as:
    cout << localTime(system_clock{}.now(), "%c") << '\n';)

Many more format specifiers are recognized by tt(put_time).  Specifiers start
with tt(%). To display a percent character as part of the format string write
it twice: tt(%%). In addition to the standard escape sequences, tt(%n) can be
used instead of tt(\n), and tt(%t) can be used instead of tt(\t).

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Year specifiers))
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))
    tline()()\
    rowthree(Y)(year as a 4 digit decimal number)(tm_year)
    rowthree(EY)(year in an alternative representation)(tm_year)
    rowthree(y)(last 2 digits of year as a decimal number
                (range [00,99]))(tm_year)
    rowthree(Oy)(last 2 digits of year using an alternative numeric
                system)(tm_year)
    rowthree(Ey)(year as offset from locale's alternative calendar
                period %EC (locale-dependent))(tm_year)
    rowthree(C)(first 2 digits of year as a decimal number
                (range [00,99]))(tm_year)
    rowthree(EC)(name of the base year (period) in the locale's
                alternative representation)(tm_year)
    rowthree(G)(ISO 8601 week-based year, i.e. the year that contains
                the specified week)(tm_year,nl() tm_wday,nl() tm_yday)
    rowthree(g)(last 2 digits of ISO 8601 week-based year
                (range [00,99]))(tm_year,nl() tm_wday,nl() tm_yday)
    tline()()\
)

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Month specifiers))
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))
    tline()()\
    rowthree(b)(abbreviated month name, e.g. Oct)(tm_mon)\
    rowthree(m)(month as a decimal number (range [01,12]))(tm_mon)\
    rowthree(Om)(month using an alternative numeric system)(tm_mon)\
    tline()()\
)

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Week specifiers))
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))
    tline()()\
    rowthree(U)(week of the year as a decimal number (Sunday is the first day
            of the week) (range [00,53]))(tm_year,nl()tm_wday,nl()tm_yday)
    rowthree(OU)(week of the year, as by %U, using an alternative numeric
            system)(tm_year,nl() tm_wday,nl() tm_yday)
    rowthree(W)(week of the year as a decimal number (Monday is the first day
            of the week) (range [00,53]))(tm_year,nl() tm_wday,nl() tm_yday)
    rowthree(OW)(week of the year, as by %W, using an alternative numeric
            system)(tm_year,nl() tm_wday,nl() tm_yday)
    rowthree(V)(ISO 8601 week of the year (range [01,53]))
            (tm_year,nl() tm_wday,nl() tm_yday)
    rowthree(OV)(week of the year, as by %V, using an alternative numeric
            system)(tm_year,nl() tm_wday,nl() tm_yday)
    tline()()\
)

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Day of the year/month specifiers))
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))
    tline()()\
    rowthree(j)(day of the year as a decimal number (range
                [001,366]))(tm_yday)
    rowthree(d)(day of the month as a decimal number (range [01,31]))(tm_mday)
    rowthree(Od)(zero-based day of the month using an alternative numeric
                system)(tm_mday)
    rowthree(e)(day of the month as a decimal number (range [1,31]))(tm_mday)
    rowthree(Oe)(one-based day of the month using an alternative numeric
            system)(tm_mday)
    tline()()\
)

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Day of the week specifiers))
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))
    tline()()\
    rowthree(a)(abbreviated weekday name, e.g. Fri)(tm_wday)
    rowthree(A)(full weekday name, e.g. Friday)(tm_wday)
    rowthree(w)(weekday as a decimal number, where Sunday is 0 (range
                [0-6]))(tm_wday)
    rowthree(Ow)(weekday, where Sunday is 0, using an alternative numeric
                system)(tm_wday)
    rowthree(u)(weekday as a decimal number, where Monday is 1 (ISO 8601
                format) (range [1-7]))(tm_wday)
    rowthree(Ou)(weekday, where Monday is 1, using an alternative numeric
                system)(tm_wday)
    tline()()\
)

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Hour, minute, second  specifiers))\
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))\
    tline()()\
    rowthree(H)(hour as a decimal number, 24 hour clock (range
                [00-23]))(tm_hour)\
    rowthree(OH)(hour from 24-hour clock using an alternative numeric
                system)(tm_hour)\
    rowthree(I)(hour as a decimal number, 12 hour clock (range
                [01,12]))(tm_hour)\
    rowthree(OI)(hour from 12-hour clock using the alternative numeric
                system)(tm_hour)\
    rowthree(M)(minute as a decimal number (range [00,59]))(tm_min)\
    rowthree(OM)(minute using an alternative numeric system)(tm_min)\
    rowthree(S)(second as a decimal number (range [00,60]))(tm_sec)\
    rowthree(OS)(second using an alternative numeric system)(tm_sec)\
    tline()()\
)

centertbl(lllll)(\
    tline()()\
    tr(xcell(5)(Additional specifiers))\
    tr(cell(Specifier)cell()cell(Meaning)cell()tlc()(std::tm field(s)))\
    tline()()\
    rowthree(c)(standard date and time string, e.g. Sun Oct 17 04:41:13
                2010)(all)\
    rowthree(Ec)(alternative date and time string)(all)\
    rowthree(x)(localized date representation)(all)\
    rowthree(Ex)(alternative date representation)(all)\
    rowthree(X)(localized time representation)(all)\
    rowthree(EX)(alternative time representation)(all)\
    rowthree(D)(equivalent to tt("%m/%d/%y"))(tm_mon,nl() tm_mday,nl()
                tm_year)\
    rowthree(F)(equivalent to tt("%Y-%m-%d") (the ISO 8601 date
                format))(tm_mon,nl() tm_mday,nl() tm_year)\
    rowthree(r)(localized 12-hour clock time)(tm_hour,nl() tm_min,nl()
                tm_sec)\
    rowthree(R)(equivalent to tt("%H:%M"))(tm_hour,nl() tm_min)\

    rowthree(T)(equivalent to tt("%H:%M:%S") (the ISO 8601 time
                format))(tm_hour,nl() tm_min,nl() tm_sec)\
    rowthree(p)(localized a.m. or p.m.)(tm_hour)\
    rowthree(z)(offset from UTC in the ISO 8601 format (e.g. -0430;nl() no
                characters if time zone information is not
                available))(tm_isdst)\
    rowthree(Z)(time zone name or abbreviation+nl()(no characters if time zone
                information is not available))(tm_isdst)\
    tline()()\
)
