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
См. также
Ссылки
ctime, _ctime32, _ctime64, _wctime, _wctime32, _wctime64
gmtime_s, _gmtime32_s, _gmtime64_s