Spec-Zone.ru › C

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

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

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

См. также

ctimectime_s
(устаревшая в C23)(C11)
преобразует объект time_t в текстовое представление
(функция)
strftime
преобразует объект tm в настраиваемое текстовое представление
(функция)
Документация C++ для asctime

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/chrono/asctime

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API