mktime, _mktime32, _mktime64

Преобразуют локальное время в календарное значение.

Синтаксис

time_t mktime(
   struct tm *timeptr
);
__time32_t _mktime32(
   struct tm *timeptr
);
__time64_t _mktime64(
   struct tm *timeptr
);

Параметры

timeptr
Указатель на структуру времени; см. раздел asctime.

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

_mktime32 возвращает указанное время календаря, закодированное как значение типа time_t. Если timeptr ссылается на дату до полуночи, 1 января 1970 г. или если время календаря не может быть представлено, _mktime32 возвращает значение -1 приведения к типу time_t. При использовании _mktime32 и timeptr при ссылке на дату после 23:59:59 18 января 2038 г. в формате UTC будет возвращено значение -1 приведения к типу time_t.

_mktime64 возвращает -1 приведения к типу __time64_t , если timeptr ссылки на дату после 23:59:59, 31 декабря 3000 г. в формате UTC.

Замечания

_mktime64_mktime32 Функции mktimeпреобразуют указанную структуру времени (возможно, неполный), на которую указывает timeptr полностью определенная структура с нормализованными значениями, а затем преобразует ее в time_t значение времени календаря. Преобразованное время имеет ту же кодировку, что и значения, возвращаемые time функцией. Исходные значения tm_wday и tm_yday компоненты timeptr структуры игнорируются, а исходные значения других компонентов не ограничиваются их обычными диапазонами.

mktime — это встроенная функция, которая эквивалентна _mktime64, если _USE_32BIT_TIME_T не определена, в этом случае она эквивалентна _mktime32.

После корректировки в соответствии с форматом UTC _mktime32 обрабатывает даты с полуночи 1 января 1970 г. до 23:59:59 18 января 2038 г. _mktime64 обрабатывает даты с полуночи 1 января 1970 г. до 23:59:59 31 декабря 3000 г. Этот аргумент может вызывать возвращение данными функциями значения -1 (приведенного к time_t, __time32_t или __time64_t), даже если указанная дата находится в пределах диапазона. Например, если вы находитесь в Каире, Египет, который находится в течение двух часов до UTC, два часа сначала будут вычитаны из указанной вами timeptrдаты; вычитание может поставить дату вне диапазона.

Эти функции можно использовать для проверки и заполнения tm структуры. В случае успешного выполнения функции задают значения для tm_wday и tm_yday и настраивают другие компоненты для отображения указанного календарного времени (однако значения принудительно задаются в их нормальных диапазонах). Окончательное значение tm_mday не задано и tm_montm_year не определено. При указании времени структуры tm задайте для поля tm_isdst значение:

  • нуль (0), чтобы указать, что действует стандартное время;

  • значение больше нуля, чтобы указать, что действует переход на зимнее время;

  • значение меньше нуля, чтобы указать, что код библиотеки времени выполнения языка C должен вычислить, действует ли стандартное время или переход на зимнее время.

Библиотека времени выполнения C определяет поведение летнего времени из переменной TZ среды. Если TZ не задано, вызов GetTimeZoneInformation API Win32 используется для получения сведений о летнем времени из операционной системы. Если вызов завершается ошибкой, библиотека предполагает, что используются правила США для реализации вычисления летнего времени. tm_isdst — это обязательное поле. Если оно не задано, его значение является неопределенным, а возвращаемые значения этих функций — непредсказуемыми. Если timeptr указывает на tm структуру, возвращаемую предыдущим вызовом asctime, gmtimeили (или localtime вариантами этих функций), tm_isdst поле содержит правильное значение.

Функции gmtime и (и _gmtime32_gmtime64, _localtime32и localtime , и_localtime64) используют один буфер для преобразования. Если вы предоставляете этот буфер mktime, _mktime32 или _mktime64, предыдущее содержимое удаляется.

Эти функции проверяют свои параметры. Если timeptr имеет значение NULL, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если продолжение выполнения разрешено, функции возвращают значение -1 и задают для errno значение EINVAL.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Требования

Маршрут Обязательный заголовок
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Библиотеки

Все версии библиотек времени выполнения языка C.

Пример

// crt_mktime.c
/* The example takes a number of days
* as input and returns the time, the current
* date, and the specified number of days.
*/

#include <time.h>
#include <stdio.h>

int main( void )
{
   struct tm  when;
   __time64_t now, result;
   int        days;
   char       buff[80];

   time( &now );
   _localtime64_s( &when, &now );
   asctime_s( buff, sizeof(buff), &when );
   printf( "Current time is %s\n", buff );
   days = 20;
   when.tm_mday = when.tm_mday + days;
   if( (result = mktime( &when )) != (time_t)-1 ) {
      asctime_s( buff, sizeof(buff), &when );
      printf( "In %d days the time will be %s\n", days, buff );
   } else
      perror( "mktime failed" );
}

Пример полученных результатов

Current time is Fri Apr 25 13:34:07 2003

In 20 days the time will be Thu May 15 13:34:07 2003

См. также

Управление временем
asctime, _wasctime
gmtime, _gmtime32, _gmtime64
localtime, _localtime32, _localtime64
_mkgmtime, _mkgmtime32, _mkgmtime64
time, _time32, _time64