Namespaces
Variants

ctime, ctime_s

From cppreference.net
Определено в заголовочном файле <time.h>
(1)
char * ctime ( const time_t * timer ) ;
(до C23)
[ [ deprecated ] ] char * ctime ( const time_t * timer ) ;
(начиная с C23)
errno_t ctime_s ( char * buf, rsize_t bufsz, const time_t * timer ) ;
(2) (начиная с C11)
1) Преобразует заданное время с начала эпохи в календарное локальное время, а затем в текстовое представление, как если бы вызывался asctime ( localtime ( timer ) ) или asctime ( localtime_r ( timer, & ( struct tm ) { 0 } ) ) (начиная с C23) . Эта функция устарела и не должна использоваться в новом коде. (начиная с C23)
2) Аналогично (1) , за исключением того, что функция эквивалентна asctime_s ( buf, bufsz, localtime_s ( timer, & ( struct tm ) { 0 } ) ) , и следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную функцию обработки ограничений :
  • buf или timer является нулевым указателем
  • bufsz меньше 26 или больше RSIZE_MAX
Как и для всех функций с проверкой границ, ctime_s гарантированно доступна только если __STDC_LIB_EXT1__ определена реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <time.h> .

Результирующая строка имеет следующий формат:

Www Mmm dd hh:mm:ss yyyy\n
  • Www - день недели (один из Mon , Tue , Wed , Thu , Fri , Sat , Sun ).
  • Mmm - месяц (один из Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec ).
  • dd - день месяца
  • hh - часы
  • mm - минуты
  • ss - секунды
  • yyyy - годы

Функция не поддерживает локализацию.

Содержание

Параметры

timer - указатель на объект time_t , определяющий время для вывода
buf - указатель на первый элемент массива char размером не менее bufsz
bufsz - максимальное количество байт для вывода, обычно размер буфера, на который указывает buf

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

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

Примечания

ctime возвращает указатель на статические данные и не является потокобезопасной. Кроме того, она модифицирует статический объект tm , который может быть общим с gmtime и localtime . POSIX помечает эту функцию устаревшей и рекомендует использовать strftime вместо неё. Стандарт C также рекомендует strftime вместо ctime и ctime_s , поскольку strftime является более гибкой и учитывает локаль.

Поведение ctime не определено для значений time_t , которые приводят к строке длиннее 25 символов (например, год 10000).

Пример

#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
#include <stdio.h>
int main(void)
{
    time_t result = time(NULL);
    printf("%s", ctime(&result));
#ifdef __STDC_LIB_EXT1__
    char str[26];
    ctime_s(str,sizeof str,&result);
    printf("%s", str);
#endif
}

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

Tue May 26 21:51:03 2015
Tue May 26 21:51:03 2015

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.27.3.2 Функция ctime (стр: 287-288)
  • K.3.8.2.2 Функция ctime_s (стр: 454)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.27.3.2 Функция ctime (стр: 393)
  • K.3.8.2.2 Функция ctime_s (стр: 626)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.23.3.2 Функция ctime (стр. 342)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.2 Функция ctime

Смотрите также

(устарело в C23) (C11)
преобразует объект tm в текстовое представление
(функция)
преобразует объект tm в пользовательское текстовое представление
(функция)