_mkgmtime, _mkgmtime32, _mkgmtime64
Преобразует время в формате UTC, представленное tmstruct относительно времени в формате UTC, представленный типом time_t .
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Параметры
- timeptr
Указатель относительно времени в формате UTC, как structtm преобразования.
Возвращаемое значение
Число типа __time32_t или __time64_t , представляющее число секунд, прошедшего с полуночи 1-е января 1970, в формате UTC.Если дата находится вне диапазона (см. раздел примeчаний) или вход не может быть интерпретировано как допустимого времени, возвращаемое значение – 1.
Заметки
Функции _mkgmtime32 и _mkgmtime64 преобразуют время в формате UTC в __time32_t или тип для представления __time64_t время в формате UTC.Для преобразования местного времени относительно времени в формате UTC, используйте mktime, _mktime32и _mktime64 .
_mkgmtime встроенная функция, результатом которого является _mkgmtime64и time_t эквивалентно __time64_t.Если необходимо принудительно компилятора интерпретировать как старое time_tпакетом обновления 32 (sp2 time_t, то можно указать _USE_32BIT_TIME_T.Это не рекомендуется, поскольку приложение может завершиться с ошибкой после 19-ого января 2038 (максимальное расстояние time_t32 (sp2) и не разрешено на всех платформах на 64.
Структура времени прошла внутри изменяется следующим образом, точно так же, как они изменяются с функциями _mktime : поля tm_wday и tm_yday набор и новых значений, основываясь на значениях tm_mday и tm_year.При указании время структурирования tm , установите поле tm_isdst :
Ноль (0) для указания того, что действует стандартное время.
Значение больше 0 для указания того, что летнее время.
Значение меньше нуля, чтобы иметь compute кода библиотеки времени выполнения языка c, является ли стандартное или летнее время.
Библиотека времени выполнения c использует переменную среды TZ, чтобы указать нужное время сохранения дневного света.Если TZ не установлен, то операционная система для получения правильной регионарную расширения функциональности времени сохранения дневного света.tm_isdst обязательное поле.Если оно не задано, и его значение не определен, то возвращаемое значение из mktime непрогнозируемо.
Диапазон функций _mkgmtime32 от полуночи 1-е января 1970, в формате UTC для 19-е,3 января.: 14:07, 2038, время в формате UTC.Диапазон _mkgmtime64 от полуночи 1-е января 1970, в формате UTC 23:59: 59 - 31-е декабря 3000, в формате UTC.Результаты с датами вне диапазона в возвращаемое значение – 1.Расстояние от которых зависит _mkgmtime , задано ли значение _USE_32BIT_TIME_T .Если не задан (по умолчанию) диапазон из _mkgmtime64; в противном случае диапазон ограничено диапазоном _mkgmtime3232 (sp2).
Обратите внимание, что gmtime используют один и localtime статически выделенный буфер для преобразования.Если ввести этот буфер в mkgmtime, прежнее содержимое уничтожены.
Пример
// crt_mkgmtime.c
#include <stdio.h>
#include <time.h>
int main()
{
struct tm t1, t2;
time_t now, mytime, gmtime;
char buff[30];
time( & now );
_localtime64_s( &t1, &now );
_gmtime64_s( &t2, &now );
mytime = mktime(&t1);
gmtime = _mkgmtime(&t2);
printf("Seconds since midnight, January 1, 1970\n");
printf("My time: %I64d\nGM time (UTC): %I64d\n\n", mytime, gmtime);
/* Use asctime_s to display these times. */
_localtime64_s( &t1, &mytime );
asctime_s( buff, sizeof(buff), &t1 );
printf( "Local Time: %s\n", buff );
_gmtime64_s( &t2, &gmtime );
asctime_s( buff, sizeof(buff), &t2 );
printf( "Greenwich Mean Time: %s\n", buff );
}
Пример результатов выполнения
Seconds since midnight, January 1, 1970
My time: 1171588492
GM time (UTC): 1171588492
Local Time: Thu Feb 15 17:14:52 2007
Greenwich Mean Time: Fri Feb 16 01:14:52 2007
В следующем примере показано, как неполную структура заполнянна с расчетными значениями дня недели и дня года.
// crt_mkgmtime2.c
#include <stdio.h>
#include <time.h>
#include <memory.h>
int main()
{
struct tm t1, t2;
time_t gmtime;
char buff[30];
memset(&t1, 0, sizeof(struct tm));
memset(&t2, 0, sizeof(struct tm));
t1.tm_mon = 1;
t1.tm_isdst = 0;
t1.tm_year = 103;
t1.tm_mday = 12;
// The day of the week and year will be incorrect in the output here.
asctime_s( buff, sizeof(buff), &t1);
printf("Before calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
gmtime = _mkgmtime(&t1);
// The correct day of the week and year were determined.
asctime_s( buff, sizeof(buff), &t1);
printf("After calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
}
Output
Before calling _mkgmtime, t1 = Sun Feb 12 00:00:00 2003
t.tm_yday = 0
After calling _mkgmtime, t1 = Wed Feb 12 00:00:00 2003
t.tm_yday = 42
См. также
Ссылки
gmtime_s, _gmtime32_s, _gmtime64_s