Spec-Zone.ru › C

ctime, ctime_s

Определено в заголовочном файле <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 — указатель null
  • 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 - указатель на первый элемент массива символов размером как минимум bufsz
bufsz - максимальное количество байтов для вывода, обычно размер буфера, на который указывает buf

Значение результата

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

См. также

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

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

Spec-Zone.ru

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