_mkgmtime
, , _mkgmtime32
_mkgmtime64
Преобразует время в формате UTC, представленное типом struct tm
, во время в формате UTC, представленное типом time_t
.
Синтаксис
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Параметры
timeptr
Указатель на время в формате UTC в виде struct tm
для преобразования.
Возвращаемое значение
Значение типа __time32_t
или __time64_t
, представляющее количество секунд, истекших после полуночи 1 января 1970 года, в формате UTC. Если дата выходит за пределы диапазона (см. раздел "Примечания") или входные данные не могут быть интерпретированы как допустимое время, возвращаемое значение равно -1.
Замечания
Функции _mkgmtime32
и _mkgmtime64
преобразовывают время в формате UTC в тип __time32_t
или __time64_t
, представляющий время в формате UTC. Для преобразования местного времени во время в формате UTC вместо этого используйте mktime
, _mktime32
и _mktime64
.
_mkgmtime
— встроенная функция, которая принимает значение _mkgmtime64
и time_t
эквивалентна __time64_t
. Если необходимо, чтобы компилятор принудительно интерпретировал time_t
как старое 32-разрядное значение time_t
, можно определить _USE_32BIT_TIME_T
. Мы не рекомендуем использовать его, так как приложение может завершиться ошибкой после 18 января 2038 г., максимальный диапазон 32-разрядной версии time_t
. Это не допускается на 64-разрядных платформах.
Структура времени, передаваемая следующим образом, изменяется так же, как и в _mktime
функциях: tm_wday
tm_yday
поля задаются новыми значениями на основе значений tm_mday
и tm_year
. Так как предполагается, что время будет в формате UTC, tm_isdst
поле игнорируется.
Диапазон функции _mkgmtime32
— от полуночи 1 января 1970 года, время в формате UTC, до 23:59:59 18 января 2038 года, время в формате UTC. Диапазон _mkgmtime64
— от полуночи 1 января 1970 года, время в формате UTC, до 23:59:59 31 декабря 3000 года, время в формате UTC. Дата вне диапазона приводит к возврату значения -1. Диапазон _mkgmtime
зависит от того, определено ли значение _USE_32BIT_TIME_T
. Если он не определен, то по умолчанию диапазон совпадает _mkgmtime64
. В противном случае диапазон ограничен 32-разрядным диапазоном _mkgmtime32
.
Используйте 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
В следующем примере показано, как заполнена неполной структурой _mkgmtime
. Он вычисляет значения для дня недели и года.
// 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 );
}
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
См. также
Управление временем
asctime
, _wasctime
asctime_s
, _wasctime_s
gmtime
, , _gmtime32
_gmtime64
gmtime_s
, , _gmtime32_s
_gmtime64_s
localtime_s
, , _localtime32_s
_localtime64_s
mktime
, , _mktime32
_mktime64
time
, , _time32
_time64