localtime_s, _localtime32_s, _localtime64_s

Преобразует значение времени в структуру и исправляет time_t для локального часового tm пояса. Эти функции являются версиями localtime, _localtime32_localtime64с улучшениями безопасности, как описано в функциях безопасности в CRT.

Синтаксис

errno_t localtime_s(
   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.

Требования

Маршрут Обязательный заголовок 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