Namespaces
Variants

asctime, asctime_s

From cppreference.net
Определено в заголовке <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)
1) Преобразует заданное календарное время 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.
Функция не поддерживает локализацию, и символ новой строки не может быть удален.
Функция изменяет статическое хранилище и не является потокобезопасной.
Эта функция устарела и не должна использоваться в новом коде.
(since C23)
2) То же, что и (1) , за исключением того, что сообщение записывается в предоставленное пользователем хранилище buf , которое гарантированно заканчивается нулевым символом, и следующие ошибки обнаруживаются во время выполнения и вызывают установленную в данный момент функцию обработки ограничений :
  • buf или time_ptr является нулевым указателем
  • 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 - размер предоставленного пользователем буфера

Возвращаемое значение

1) указатель на статическую нуль-терминированную строку символов, содержащую текстовое представление даты и времени, как описано выше. Строка может быть общей для asctime и ctime и может перезаписываться при каждом вызове любой из этих функций.
2) ноль при успехе, ненулевое значение при ошибке, в этом случае buf [ 0 ] устанавливается в ноль (если только buf не является нулевым указателем или 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 <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
}

Возможный вывод:

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 в пользовательское текстовое представление
(функция)