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
См. также
Ссылки
localtime, _localtime32, _localtime64