asctime_s
, _wasctime_s
Преобразуют структуру времени tm
в символьную строку. Эти функции — это версии с улучшениями безопасности, _wasctime
как описано в функциях безопасности в CRT.asctime
Синтаксис
errno_t asctime_s(
char* buffer,
size_t numberOfElements,
const struct tm *tmSource
);
errno_t _wasctime_s(
wchar_t* buffer,
size_t numberOfElements
const struct tm *tmSource
);
template <size_t size>
errno_t asctime_s(
char (&buffer)[size],
const struct tm *tmSource
); // C++ only
template <size_t size>
errno_t _wasctime_s(
wchar_t (&buffer)[size],
const struct tm *tmSource
); // C++ only
Параметры
buffer
Указатель на буфер для хранения результата строки символов. Эта функция принимает указатель на допустимое расположение в памяти, размер которого указан в numberOfElements
.
numberOfElements
Размер буфера, используемого для хранения результата.
tmSource
Структура даты/времени. Эта функция принимает указатель на допустимый объект struct tm
.
Возвращаемое значение
Нуль при успешном завершении. Если произошел сбой, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, функция возвращает код ошибки. Коды ошибок определенны в ERRNO.H. Дополнительные сведения см. в разделе errno
констант. Фактические коды ошибок, возвращаемые для каждого условия ошибки, приведены в следующей таблице.
Условия ошибок
buffer |
numberOfElements |
tmSource |
Возврат | Значение в buffer |
---|---|---|---|---|
NULL |
Любой | Любой | EINVAL |
Не изменено |
Не NULL (указывает на допустимый адрес в памяти) |
0 | Любое | EINVAL |
Не изменено |
Не NULL |
0<numberOfElements < 26 |
Любое | EINVAL |
Пустая строка |
Не NULL |
>= 26 | NULL |
EINVAL |
Пустая строка |
Не NULL |
>= 26 | Недопустимая структура времени или компоненты времени выходят за пределы допустимого диапазона | EINVAL |
Пустая строка |
Примечание.
Условия ошибки для функции wasctime_s
аналогичны таковым для функции asctime_s
, но ограничение размера измеряется в словах.
Замечания
Функция asctime
преобразует время, хранящееся в виде структуры, в символьную строку. Значение tmSource
обычно получается из вызова gmtime
или localtime
. Обе функции могут использоваться для заполнения структуры tm
, как определено в файле TIME.H.
Член timeptr | Значение |
---|---|
tm_hour |
Часы с полуночи (0-23) |
tm_isdst |
Положительное значение, если летнее время действует; 0, если летнее время не действует; отрицательно, если состояние летнего времени неизвестно. Библиотека времени выполнения C принимает правила США для реализации проверки на летнее время (DST). |
tm_mday |
День месяца (1-31) |
tm_min |
Минуты после часа (0-59) |
tm_mon |
Месяц (0-11; Январь = 0) |
tm_sec |
Секунды после минуты (0-59) |
tm_wday |
День недели (0-6; Воскресенье = 0) |
tm_yday |
День года (0-365; 1 января = 0) |
tm_year |
Год (текущий год минус 1900) |
Преобразованная символьная строка также настраивается согласно параметрам местного часового пояса. Сведения о настройке локального времени см. в функциях time
, _time32
,_ftime32
_time64
_ftime
, , _ftime64
а localtime_s
также _localtime32_s
_localtime64_s
о функциях. Сведения об определении среды часового пояса и глобальных переменных см. в статье _tzset
.
Итоговая строка, полученная с помощью asctime_s
, содержит ровно 26 символов и имеет вид Wed Jan 2 02:03:55 1980\n\0
. Время в 24-часовом формате. Все поля имеют постоянную ширину. Символ новой строки и нуль-символ занимают две последние позиции строки. Значение, переданное как numberOfElements
должно быть по крайней мере таким размером. Если это меньше, EINVAL
возвращается код ошибки.
_wasctime_s
— это версия функции asctime_s
для расширенных символов. Поведение_wasctime_s
и asctime_s
идентично в противном случае.
Версии библиотек отладки этих функций сначала заполняют буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставление подпрограмм универсального текста
Подпрограмма TCHAR.H | _UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tasctime_s |
asctime_s |
asctime_s |
_wasctime_s |
В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
Требования
Маршрут | Обязательный заголовок |
---|---|
asctime_s |
<time.h> |
_wasctime_s |
<time.h> или <wchar.h> |
Безопасность
Если указатель буфера не NULL
указан, а указатель не указывает на допустимый буфер, функция перезаписывает все, что находится в расположении. Эта ошибка также может привести к нарушению доступа.
Если переданный аргумент size превышает фактический размер буфера, может возникать ошибка переполнения буфера.
Пример
Эта программа помещает системное время в длинное целое число aclock
, преобразует его в структуру newtime
, а затем преобразует его в строковую asctime_s
форму для вывода с помощью функции.
// crt_asctime_s.c
#include <time.h>
#include <stdio.h>
struct tm newtime;
__time32_t aclock;
int main( void )
{
char buffer[32];
errno_t errNum;
_time32( &aclock ); // Get time in seconds.
_localtime32_s( &newtime, &aclock ); // Convert time to struct tm form.
// Print local time as a string.
errNum = asctime_s(buffer, 32, &newtime);
if (errNum)
{
printf("Error code: %d", (int)errNum);
return 1;
}
printf( "Current date and time: %s", buffer );
return 0;
}
Current date and time: Wed May 14 15:30:17 2003
См. также
Управление временем
ctime_s
, , _ctime32_s
_wctime_s
_ctime64_s
_wctime32_s
,_wctime64_s
_ftime
, , _ftime32
_ftime64
gmtime_s
, , _gmtime32_s
_gmtime64_s
localtime_s
, , _localtime32_s
_localtime64_s
time
, , _time32
_time64
_tzset