Partilhar via


_mkgmtime, _mkgmtime32, _mkgmtime64

Converte uma hora UTC representada por a struct tm em uma hora UTC representada por um time_t tipo.

Sintaxe

time_t _mkgmtime( // See note in remarks section about linkage
   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 para converter.

Valor de retorno

Uma quantidade do tipo __time32_t ou __time64_t que representa o número de segundos decorridos desde a meia-noite, 1 de janeiro de 1970, em Tempo Universal Coordenado (UTC). Se a data estiver fora do intervalo (consulte a seção Observações) ou a entrada não puder ser interpretada como uma hora válida, o valor de retorno será -1.

Observações

As _mkgmtime32 funções e _mkgmtime64 convertem uma hora UTC em um __time32_t ou __time64_t tipo que representa a hora em UTC. Para converter uma hora local em hora UTC, use mktime, _mktime32e _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 antigo 32-bit time_t, você pode definir _USE_32BIT_TIME_T. Não recomendamos isso, porque seu aplicativo pode falhar após 18 de janeiro de 2038, o intervalo máximo de um 32 bits time_t. Não é permitido em plataformas de 64 bits.

A estrutura de tempo passada é alterada da seguinte forma, da mesma forma que é alterada pelas _mktime funções: os tm_wday campos e tm_yday são definidos como novos valores com base nos valores de tm_mday e tm_year. Como a hora é assumida como UTC, o tm_isdst campo é ignorado.

O intervalo da função é da meia-noite, 1 de janeiro de 1970, UTC às 23:59:59 18 de janeiro de _mkgmtime32 2038, UTC. O intervalo é da meia-noite, 1 de janeiro de 1970, UTC às 23:59:59, 31 de dezembro de _mkgmtime64 3000, UTC. Uma data fora do intervalo resulta em um valor de retorno de -1. O intervalo de depende se _mkgmtime_USE_32BIT_TIME_T é definido. Quando não está definido, que é o padrão, o intervalo é o mesmo _mkgmtime64que . Caso contrário, o intervalo é limitado ao intervalo de 32 bits de _mkgmtime32.

Ambos gmtime e localtime usar um buffer estático comum para a conversão. Se você fornecer esse buffer para _mkgmtime, o conteúdo anterior será destruído.

Observação

Quando você usa o Windows SDK versão 10.0.26100.6901 e Visual Studio 2026 ou posterior juntos, _mkgmtime não é mais static inline (ligação interna). Em vez disso, é inline (ligação externa).
Para retornar ao comportamento anterior, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 antes de incluir quaisquer cabeçalhos CRT. Por padrão, _STATIC_INLINE_UCRT_FUNCTIONS é definido como 0.
Essa alteração aumenta a conformidade do UCRT com o padrão C++ e melhora a compatibilidade com módulos C++.

Examples

// 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. 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

Consulte também

Gestão do 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