asctime, asctime_s
From cppreference.com
C
Concurrency support (C11)
Date and time utilities
Functions
Time manipulation
(C11)
(C23)
Format conversions
asctimeasctime_s
(deprecated in C23)(C11)
(deprecated in C23)(C11)
(C95)
(C23)(C11)
(C23)(C11)
Constants
Types
(C11)
Defined in header
<time.h>
(1)
char* asctime( const struct tm * time_ptr );
(until C23)
[[deprecated]] char* asctime( const struct tm * time_ptr );
(since C23)
errno_t asctime_s( char* buf, rsize_t bufsz, const struct tm * time_ptr );
(2)
(since C11)
1) Converts given calendar time 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 ofMon
,Tue
,Wed
,Thu
,Fri
,Sat
,Sun
.Mmm
- three-letter English abbreviated month name from time_ptr->tm_mon, one ofJan
,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.
This function is deprecated and should not be used in new code.
(since C23)2) Same as (1), except that the message is written into user-provided storage buf, which is guaranteed to be null-terminated, and the following errors are detected at runtime and call the currently installed constraint handler function:
- buf or time_ptr is a null pointer
- bufsz is less than 26 or greater than RSIZE_MAX
- not all members of *time_ptr are within their normal ranges
- the year indicated by time_ptr->tm_year is less than 0 or greater than 9999.
- As with all bounds-checked functions,
asctime_s
is only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before including <time.h>.
[edit] Parameters
time_ptr
-
pointer to a tm object specifying the time to print
buf
-
pointer to a user-supplied buffer at least 26 bytes in length
bufsz
-
size of the user-supplied buffer
[edit] Return value
1) pointer to a static null-terminated character string holding the textual representation of date and time as described above. The string may be shared between
asctime
and ctime , and may be overwritten on each invocation of any of those functions.2) zero on success, non-zero on failure, in which case buf[0] is set to zero (unless buf is a null pointer or bufsz is zero or greater than RSIZE_MAX).
[edit] Notes
asctime
returns a pointer to static data and is not thread-safe. POSIX marks this function obsolete and recommends strftime instead. The C standard also recommends strftime instead of asctime
and asctime_s
because strftime
is more flexible and locale-sensitive.
POSIX limits undefined behaviors only to 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.
[edit] Example
Run this code
#define __STDC_WANT_LIB_EXT1__ 1 #include <stdio.h> #include <time.h> int main(void) { struct tm tm = *localtime (&(time_t ){time (NULL )}); printf ("%s", asctime(&tm )); // note implicit trailing '\n' #ifdef __STDC_LIB_EXT1__ char str[26]; asctime_s(str, sizeof str, &tm ); printf ("%s", str); #endif }
Possible output:
Tue May 26 21:51:50 2015 Tue May 26 21:51:50 2015
[edit] References
- C17 standard (ISO/IEC 9899:2018):
- 7.27.2.1 The asctime function (p: 287)
- K.3.8.2.1 The asctime_s function (p: 453-454)
- C11 standard (ISO/IEC 9899:2011):
- 7.27.2.1 The asctime function (p: 392-393)
- K.3.8.2.1 The asctime_s function (p: 624-625)
- C99 standard (ISO/IEC 9899:1999):
- 7.23.3.1 The asctime function (p: 341-342)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.12.3.1 The asctime function
[edit] See also
C++ documentation for asctime