_mkgmtime
, _mkgmtime32
, _mkgmtime64
Converte uma hora UTC representada por uma struct tm
para uma hora UTC representada por um tipo time_t
.
Sintaxe
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Parâmetros
timeptr
Um ponteiro para a hora UTC como um struct tm
a ser convertido.
Valor retornado
Uma quantidade de tipo __time32_t
ou __time64_t
que representa o número de segundos passados desde a meia-noite de 1º de janeiro de 1970, em UTC (Tempo Universal Coordenado). Se a data estiver fora do intervalo (veja a seção Comentários) ou a entrada não puder ser interpretada como uma hora válida, o valor retornado será -1.
Comentários
As funções _mkgmtime32
e _mkgmtime64
convertem uma hora UTC em um tipo __time32_t
ou __time64_t
que representa a hora em UTC. Para converter uma hora local em hora UTC, use mktime
, _mktime32
e _mktime64
em vez disso.
_mkgmtime
é uma função embutida que é avaliada como _mkgmtime64
e time_t
é equivalente a __time64_t
. Se você precisar forçar o compilador a interpretar time_t
como o time_t
antigo de 32 bits, poderá definir _USE_32BIT_TIME_T
. Isso não é recomendado, pois seu aplicativo poderá falhar após 18 de janeiro de 2038, o intervalo máximo de um time_t
de 32 bits. Isso não é permitido em plataformas de 64 bits.
A estrutura de tempo passada será alterada da seguinte maneira, da mesma forma que é alterada com as funções _mktime
: os campos tm_wday
e tm_yday
são definidos com novos valores com base nos valores de tm_mday
e tm_year
. Como o tempo é considerado como o UTC, o campo tm_isdst
é ignorado.
O intervalo da função _mkgmtime32
é de meia-noite de 1º de janeiro de 1970, UTC, até 23:59:59 de 18 de janeiro de 2038, UTC. O intervalo de _mkgmtime64
é de meia-noite de 1º de janeiro de 1970, UTC, até 23:59:59 de 31 de dezembro de 3000, UTC. Uma data fora do intervalo resulta em um valor retornado igual a -1. O intervalo de _mkgmtime
depende se _USE_32BIT_TIME_T
está definido. Quando não está definido, que é o padrão, o intervalo será o mesmo que _mkgmtime64
. Caso contrário, o intervalo será limitado ao intervalo de 32 bits de _mkgmtime32
.
gmtime
e localtime
usam um buffer estático comum para a conversão. Se esse buffer for fornecido a _mkgmtime
, os conteúdos anteriores serão destruídos.
Exemplos
// 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
O exemplo a seguir mostra como a estrutura incompleta é preenchida por _mkgmtime
. Ele calcula valores para o dia da semana e do ano.
// 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
Confira também
Gerenciamento de tempo
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