Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразуют локальное время в календарное значение.
Синтаксис
time_t mktime( // See note in remarks section about linkage
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.
Замечания
mktime
_mktime32 Функции _mktime64преобразуют указанную структуру времени (возможно, неполный), на которую указывает 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 и (и localtime_gmtime32, _gmtime64и _localtime32 , и_localtime64) используют один буфер для преобразования. Если вы предоставляете этот буфер mktime, _mktime32 или _mktime64, предыдущее содержимое удаляется.
Эти функции проверяют свои параметры. Если timeptr имеет значение NULL, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если продолжение выполнения разрешено, функции возвращают значение -1 и задают для errno значение EINVAL.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Замечание
При использовании пакета SDK для Windows версии 10.0.26100.6901 и Visual Studio 2026 или более поздней версии больше mktime не static inline будет (внутренняя компоновка). Вместо этого это inline (внешняя компоновка).
Чтобы вернуться к предыдущему поведению, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 прежде чем включать любые заголовки CRT. По умолчанию параметр _STATIC_INLINE_UCRT_FUNCTIONS имеет значение 0.
Это изменение повышает соответствие UCRT стандарту C++ и улучшает совместимость с модулями C++.
Требования
| Маршрут | Обязательный заголовок |
|---|---|
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