Defined in header <ctime> | ||
---|---|---|
char* asctime( const std::tm* time_ptr ); |
Converts given calendar time std::tm
to a textual representation of the following fixed 25-character form: Www Mmm dd hh:mm:ss yyyy\n
.
Www
- three-letter English abbreviated day of the week from time_ptr->tm_wday
, one of Mon
, Tue
, Wed
, Thu
, Fri
, Sat
, Sun
. Mmm
- three-letter English abbreviated month name from time_ptr->tm_mon
, one of Jan
, Feb
, Mar
, Apr
, May
, Jun
, Jul
, Aug
, Sep
, Oct
, Nov
, Dec
. dd
- 2-digit day of the month from timeptr->tm_mday
as if printed by sprintf
using %2d
hh
- 2-digit hour from timeptr->tm_hour
as if printed by sprintf
using %.2d
mm
- 2-digit minute from timeptr->tm_min
as if printed by sprintf
using %.2d
ss
- 2-digit second from timeptr->tm_sec
as if printed by sprintf
using %.2d
yyyy
- 4-digit year from timeptr->tm_year + 1900
as if printed by sprintf
using %4d
The behavior is undefined if any member of *time_ptr
is outside its normal range.
The behavior is undefined if the calendar year indicated by time_ptr->tm_year
has more than 4 digits or is less than the year 1000.
The function does not support localization, and the newline character cannot be removed.
The function modifies static storage and is not thread-safe.
time_ptr | - | pointer to a std::tm object specifying the time to print |
Pointer to a static null-terminated character string holding the textual representation of date and time. The string may be shared between std::asctime
and std::ctime
, and may be overwritten on each invocation of any of those functions.
This function returns a pointer to static data and is not thread-safe. POSIX marks this function obsolete and recommends locale-dependent std::strftime
instead. In std::locale
("C")
the std::strftime
format string "%c\n"
will be an exact match to std::asctime
output, while in other locales the format string "%a %b %e %H:%M:%S %Y\n"
will be a potentially closer but not always exact match.
POSIX limits undefined behaviors only to the cases when the output string would be longer than 25 characters, when timeptr->tm_wday
or timeptr->tm_mon
are not within the expected ranges, or when timeptr->tm_year
exceeds INT_MAX-1990
.
Some implementations handle timeptr->tm_mday==0
as meaning the last day of the preceding month.
#include <ctime> #include <iomanip> #include <iostream> int main() { const std::time_t now = std::time(nullptr); for (const char *localeName : {"C", "en_US.utf8", "de_DE.utf8", "ja_JP.utf8" }) { std::cout << "locale " << localeName << ":" "\n" << std::left; std::locale::global(std::locale(localeName)); std::cout << std::setw(40) << " asctime" << std::asctime(std::localtime(&now)); // strftime output for comparison: char buf[64]; if (strftime(buf, sizeof buf, "%c\n", std::localtime(&now))) { std::cout << std::setw(40) << " strftime %c" << buf; } if (strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %Y\n", std::localtime(&now))) { std::cout << std::setw(40) << " strftime %a %b %e %H:%M:%S %Y" << buf; } std::cout << '\n'; } }
Possible output:
locale C: asctime Wed Nov 4 00:45:01 2020 strftime %c Wed Nov 4 00:45:01 2020 strftime %a %b %e %H:%M:%S %Y Wed Nov 4 00:45:01 2020 locale en_US.utf8: asctime Wed Nov 4 00:45:01 2020 strftime %c Wed 04 Nov 2020 12:45:01 AM UTC strftime %a %b %e %H:%M:%S %Y Wed Nov 4 00:45:01 2020 locale de_DE.utf8: asctime Wed Nov 4 00:45:01 2020 strftime %c Mi 04 Nov 2020 00:45:01 UTC strftime %a %b %e %H:%M:%S %Y Mi Nov 4 00:45:01 2020 locale ja_JP.utf8: asctime Wed Nov 4 00:45:01 2020 strftime %c 2020年11月04日 00時45分01秒 strftime %a %b %e %H:%M:%S %Y 水 11月 4 00:45:01 2020
converts a std::time_t object to a textual representation (function) |
|
converts a std::tm object to custom textual representation (function) |
|
(C++11) | formats and outputs a date/time value according to the specified format (function template) |
C documentation for asctime |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/chrono/c/asctime