asctime, asctime_s
Определено в заголовке <time.h> | ||
|---|---|---|
| (1) | ||
char* asctime( const struct tm* time_ptr ); | (до C23) | |
[[deprecated]] char* asctime( const struct tm* time_ptr ); | (с C23) | |
errno_t asctime_s( char* buf, rsize_t bufsz, const struct tm* time_ptr ); | (2) | (с C11) |
tm в текстовое представление следующей фиксированной формы из 25 символов: Www Mmm dd hh:mm:ss yyyy\n -
Www- трёхбуквенное сокращённое английское название дня недели изtime_ptr->tm_wday, одно изMon,Tue,Wed,Thu,Fri,Sat,Sun. -
Mmm- трёхбуквенное сокращённое английское название месяца изtime_ptr->tm_mon, одно изJan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec. -
dd- двузначное число дня месяца изtimeptr->tm_mdayкак если бы оно печаталось с помощьюsprintfс использованием%2d -
hh- двузначное число часа изtimeptr->tm_hourкак если бы оно печаталось с помощьюsprintfс использованием%.2d -
mm- двузначное число минут изtimeptr->tm_minкак если бы оно печаталось с помощьюsprintfс использованием%.2d -
ss- двузначное число секунд изtimeptr->tm_secкак если бы оно печаталось с помощьюsprintfс использованием%.2d -
yyyy- четырёхзначный год изtimeptr->tm_year + 1900как если бы он печатался с помощьюsprintfс использованием%4d
*time_ptr выходит за пределы своего обычного диапазонаtime_ptr->tm_year , имеет более 4 цифр или меньше 1000 года.| Эта функция устарела и не должна использоваться в новом коде. | (с C23) |
buf, которое гарантированно имеет нуль-терминатор, и следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную функцию обработчика ограничений обработчика ограничений: -
-
bufилиtime_ptrявляется указателем null -
bufszменьше 26 или большеRSIZE_MAX - не все члены
*time_ptrнаходятся в пределах своих обычных диапазонов - год, указанный
time_ptr->tm_year, меньше 0 или больше 9999
-
- Как и во всех функциях с проверкой границ,
asctime_sгарантируется доступность только если__STDC_LIB_EXT1__определено реализацией и если пользователь определяет__STDC_WANT_LIB_EXT1__в целое значение1перед включением<time.h>.
Параметры
| time_ptr | - | указатель на объект tm, определяющий время для печати |
| buf | - | указатель на предоставленный пользователем буфер длиной не менее 26 байтов |
| bufsz | - | размер предоставленного пользователем буфера |
Возвращаемое значение
asctime и ctime, и может быть перезаписана при каждом вызове любой из этих функций.buf[0] устанавливается в ноль (если только buf не является указателем null или bufsz не равно нулю или больше RSIZE_MAX).Примечания
asctime возвращает указатель на статические данные и не является потокобезопасной. POSIX отмечает эту функцию как устаревшую и рекомендует strftime вместо неё. Стандарт C также рекомендует strftime вместо asctime и asctime_s , так как strftime более гибкий и учитывает локаль.
POSIX ограничивает неопределённое поведение только случаями, когда строка вывода будет длиннее 25 символов, когда timeptr->tm_wday или timeptr->tm_mon не находятся в ожидаемых диапазонах, или когда timeptr->tm_year превышает INT_MAX-1990.
Некоторые реализации обрабатывают timeptr->tm_mday==0 как означающее последний день предыдущего месяца.
Пример
#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
#include <stdio.h>
int main(void)
{
struct tm tm = *localtime(&(time_t){time(NULL)});
printf("%s", asctime(&tm));
#ifdef __STDC_LIB_EXT1__
char str[26];
asctime_s(str, sizeof str, &tm);
printf("%s", str);
#endif
}Возможный вывод:
Tue May 26 21:51:50 2015 Tue May 26 21:51:50 2015
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.27.2.1 Функция asctime (стр: 287)
- K.3.8.2.1 Функция asctime_s (стр: 453-454)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.27.2.1 Функция asctime (стр: 392-393)
- K.3.8.2.1 Функция asctime_s (стр: 624-625)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.23.3.1 Функция asctime (стр: 341-342)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.12.3.1 Функция asctime
См. также
|
(устаревшая в C23)(C11) | преобразует объект time_t в текстовое представление (функция) |
преобразует объект tm в настраиваемое текстовое представление (функция) |
|
Документация C++ для asctime |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/chrono/asctime