Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразует значение времени в структуру и исправляет time_t для локального часового tm пояса. Эти функции являются версиями _localtime64с улучшениями безопасности, как описано в функциях безопасности в CRT.
Синтаксис
errno_t localtime_s( // See note in remarks section about linkage
struct tm* const tmDest,
time_t const* const sourceTime
);
errno_t _localtime32_s(
struct tm* tmDest,
__time32_t const* sourceTime
);
errno_t _localtime64_s(
struct tm* tmDest,
__time64_t const* sourceTime
);
Параметры
tmDest
Указатель на структуру времени, которую требуется заполнить.
sourceTime
Указатель на хранимое время.
Возвращаемое значение
Нуль при успешном завершении. Возвращаемое значение — это код ошибки, если произошел сбой. Коды ошибок определены в Errno.h. Список этих ошибок см. в разделе errno.
Условия ошибок
tmDest |
sourceTime |
Возвращаемое значение | Значение в tmDest |
Вызывает обработчик недопустимого параметра |
|---|---|---|---|---|
NULL |
любое | EINVAL |
Не изменено | Да |
Не NULL (указывает на допустимый адрес в памяти) |
NULL |
EINVAL |
Во всех полях заданы значения –1 | Да |
Не NULL (указывает на допустимый адрес в памяти) |
имеет значение меньше 0 или больше _MAX__TIME64_T |
EINVAL |
Во всех полях заданы значения –1 | No |
Первые два условия ошибки вызывают обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, эти функции устанавливают параметр errno в значение EINVAL и возвращают значение EINVAL.
Замечания
Функция localtime_s преобразует время, хранящееся в качестве time_t значения, и сохраняет результат в структуре типа tm. Значение time_t типа sourceTime представляет секунды, прошедшие с полуночи (00:00:00) 1-го января 1970 года в формате UTC. Это значение часто получается из time функции.
Функция localtime_s выполняет коррекцию для местного часового пояса, если пользователь сначала задает глобальную переменную среды TZ. Если переменная TZ задана, автоматически устанавливаются три других переменных среды (_timezone, _daylight и _tzname).
TZ Если переменная не задана, пытается использовать сведения часового пояса, localtime_s указанные в приложении date/Time в панель управления. Если эти сведения не удается получить, PST8PDT, которая обозначает часовой пояс Тихого океана, используется по умолчанию. См _tzset . описание этих переменных.
TZ представляет собой расширение Microsoft и не является частью стандарта ANSI для localtime.
Примечание.
Целевая среда должна попытаться определить, действует ли летнее время.
Функция _localtime64_s, которая использует структуру __time64_t, допускает даты до 23:59:59 18 декабря 3001 года в формате UTC, тогда как функция _localtime32_s представляет даты до 23:59:59 18 января 2038 года в формате UTC.
localtime_s — встроенная функция, которая принимает значение _localtime64_s и time_t эквивалентна __time64_t. Если необходимо принудительно интерпретировать time_t компилятор как старый 32-разрядный time_t, можно определить _USE_32BIT_TIME_T, что приводит localtime_s к оценке _localtime32_s. Мы не рекомендуем _USE_32BIT_TIME_Tиспользовать приложение, так как приложение может завершиться сбоем после 18 января 2038 г. и не допускается на 64-разрядных платформах.
Поля типа tm структуры хранят следующие значения, каждая из которых является int.
| Поле | Description |
|---|---|
tm_sec |
Секунды после минуты (0 – 59). |
tm_min |
Минуты после часа (0 – 59). |
tm_hour |
Часы с полуночи (0 – 23). |
tm_mday |
День месяца (1 – 31). |
tm_mon |
Месяц (0 – 11; Январь = 0). |
tm_year |
Год (текущий год минус 1900). |
tm_wday |
День недели (0 – 6; Воскресенье = 0). |
tm_yday |
День года (0 – 365; 1 января = 0). |
tm_isdst |
Положительное значение, если летнее время действует; 0, если летнее время не действует; отрицательное значение, если состояние летнего времени неизвестно. |
Если задана переменная среды TZ, для реализации перехода на летнее время (DST) в библиотеке времени выполнения C принимаются правила, подходящие для США.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Примечание.
При использовании пакета SDK для Windows версии 10.0.26100.6901 и Visual Studio 2026 или более поздней версии больше localtime_s не static inline будет (внутренняя компоновка). Вместо этого это inline (внешняя компоновка).
Чтобы вернуться к предыдущему поведению, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 прежде чем включать любые заголовки CRT. По умолчанию параметр _STATIC_INLINE_UCRT_FUNCTIONS имеет значение 0.
Это изменение повышает соответствие UCRT стандарту C++ и улучшает совместимость с модулями C++.
Требования
| Маршрут | Обязательный заголовок C | Обязательный заголовок C++ |
|---|---|---|
localtime_s, , _localtime32_s_localtime64_s |
<time.h> |
<ctime> или <time.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_localtime_s.c
// This program uses _time64 to get the current time
// and then uses _localtime64_s() to convert this time to a structure
// representing the local time. The program converts the result
// from a 24-hour clock to a 12-hour clock and determines the
// proper extension (AM or PM).
#include <stdio.h>
#include <string.h>
#include <time.h>
int main( void )
{
struct tm newtime;
char am_pm[] = "AM";
__time64_t long_time;
char timebuf[26];
errno_t err;
// Get time as 64-bit integer.
_time64( &long_time );
// Convert to local time.
err = _localtime64_s( &newtime, &long_time );
if (err)
{
printf("Invalid argument to _localtime64_s.");
exit(1);
}
if( newtime.tm_hour > 12 ) // Set up extension.
strcpy_s( am_pm, sizeof(am_pm), "PM" );
if( newtime.tm_hour > 12 ) // Convert from 24-hour
newtime.tm_hour -= 12; // to 12-hour clock.
if( newtime.tm_hour == 0 ) // Set hour to 12 if midnight.
newtime.tm_hour = 12;
// Convert to an ASCII representation.
err = asctime_s(timebuf, 26, &newtime);
if (err)
{
printf("Invalid argument to asctime_s.");
exit(1);
}
printf( "%.19s %s\n", timebuf, am_pm );
}
Fri Apr 25 01:19:27 PM
См. также
Управление временем
asctime_s, _wasctime_s
ctime, , _ctime32_ctime64_wctime_wctime32,_wctime64
_ftime, , _ftime32_ftime64
gmtime_s, , _gmtime32_s_gmtime64_s
localtime, , _localtime32_localtime64
time, , _time32_time64
_tzset