localtime_s, _localtime32_s, _localtime64_s

Преобразует значение времени и исправляет для местного часового пояса. Здесь представлены версии localtime, _localtime32, _localtime64 с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.

errno_t localtime_s(
   struct tm* _tm,
   const time_t *time 
);
errno_t _localtime32_s(
   struct tm* _tm,
   const time32_t *time 
);
errno_t _localtime64_s(
   struct tm* _tm,
   const _time64_t *time 
);

Параметры

  • _tm
    Указатель на структуру времени, которую требуется заполнить.

  • time
    Указатель на хранимое время.

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

Ноль, если успешно. Возвращаемое значение — код ошибки в случае сбоя. Коды ошибок определенны в Errno.h. Список этих ошибок см. в разделе errno.

Условия возникновения ошибки

_tm

time

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

Значение в _tm

Вызывает обработчик недопустимого параметра

NULL

any

EINVAL

Без изменений

Да

Не NULL (указывает на допустимый адрес памяти)

NULL

EINVAL

Все поля равны -1

Да

Не NULL (указывает на допустимый адрес памяти)

Параметр меньше 0 или превосходящий _MAX__TIME64_T.

EINVAL

Все поля равны -1

Нет

В случае первых двух условий ошибки, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции устанавливают для errno значение EINVAL и возвращают EINVAL.

Заметки

Функция _localtime32_s преобразует время, хранящееся в виде значения time_t и сохраняет результат в структуре типа tm. long значение timer представляет секунды, прошедшие с полуночи (00:00:00) 1-го января 1970, время в формате UTC. Это значение обычно получается из функции time.

_localtime32_s исправляется для местного часового пояса, если пользователь сначала задает глобальную переменную среды TZ. Если TZ задано, три других переменных среды (_timezone, _daylight и _tzname) также устанавливаются автоматически. Если переменная TZ не задана, localtime32_s пытается использовать данные часового пояса, определенные в приложении Дата/время в Панели управления. Если эти сведения недоступны, PST8PDT, что означает Тихоокеанский часовой пояс, используется по умолчанию. См. _tzset для описания этих переменных. TZ является расширением Майкрософт и не является частью стандарта ANSI для localtime.

Примечание

Целевая среда должна попытаться определить, действует ли летнее время.

_localtime64_s, которая использует структуру __time64_t, разрешает даты до 23:59: 59 31-го декабря 3000, время в формате UTC, тогда как _localtime32_s представляет даты до 03:14:07 19-го января 2038, время в формате UTC.

localtime_s — встроенная функция, которая принимает значение _localtime64_s и time_t эквивалентна __time64_t. Если необходимо обеспечить интерпретацию компилятором time_t как старого 32-битного time_t, можно определить _USE_32BIT_TIME_T. Это заставит localtime_s вычисляться как _localtime32_s. Это не рекомендуется, поскольку приложение может завершиться с ошибкой после 19-ого января 2038 и не поддерживается на 64 разрядных платформах.

Поля структурного типа tm хранят следующие значения, каждое из которых является int:

  • 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 задана, библиотека времени выполнения C принимает правила, соответствующие Соединенным Штатам, для реализации перехода на летнее время (DST).

Требования

Подпрограмма

Обязательный заголовок

localtime_s

<time.h>

_localtime32_s

<time.h>

_localtime64_s

<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

Эквивалент в .NET Framework

System::DateTime::ToLocalTime

См. также

Ссылки

Управление временем

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