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
_wctime
_ctime64
_wctime32
,_wctime64
_ftime
, , _ftime32
_ftime64
gmtime_s
, , _gmtime32_s
_gmtime64_s
localtime
, , _localtime32
_localtime64
time
, , _time32
_time64
_tzset