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_mon
tm_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