Поделиться через


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 ссылается на время после 03:14:07 19 января 2038 г. в формате UTC, параметр возвращает значение -1, приведенное к типу time_t.

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

Заметки

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

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

После корректировки в соответствии с форматом UTC _mktime32 обрабатывает даты с полуночи 1 января 1970 г. до 03:14:07 19 января 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_mon и tm_year. При указании времени структуры tm задайте для поля tm_isdst значение:

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

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

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

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

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

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

Требования

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

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

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

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

System::DateTime::DateTime

См. также

Ссылки

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

asctime, _wasctime

gmtime, _gmtime32, _gmtime64

localtime, _localtime32, _localtime64

_mkgmtime, _mkgmtime32, _mkgmtime64

time, _time32, _time64