Compartilhar via


_mkgmtime, _mkgmtime32, _mkgmtime64

Converte uma hora UTC representadas por tmstruct a hora UTC representadas por um tipo de time_t .

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 structtm ser convertida.

Valor de retorno

Um valor de tipo __time32_t ou __time64_t que representam o número de segundos decorridos desde meia-noite, o 1º de janeiro de 1970, no Tempo Universal Coordenado (UTC). Se a data estiver fora do intervalo (consulte a seção comentários) ou a entrada não pode ser interpretada como uma hora válida, o valor de retorno será – 1.

Comentários

As funções de _mkgmtime32 e de _mkgmtime64 convertem hora UTC para um tipo de __time32_t ou de __time64_t que representa a hora em UTC. Para converter uma hora locais a hora UTC, use mktime, _mktime32, e _mktime64 em vez disso.

_mkgmtime é uma função embutida que é avaliada para _mkgmtime64, e time_t é equivalente a __time64_t. Se você precisar forçar o compilador para interpretar time_tcomo time_tde 32 bits antigo, você pode definir _USE_32BIT_TIME_T. Isso não é recomendado porque seu aplicativo pode falhar depois do 19 de janeiro de 2038 (o intervalo máximo de time_tde 32 bits), e não é permitido de inteiro em plataformas de 64 bits.

A estrutura de tempo passou será modificada no da seguinte maneira, da mesma maneira como são alterados com as funções de _mktime : os campos de tm_wday e de tm_yday são definidos para os novos valores com base nos valores de tm_mday e de tm_year. Ao especificar uma hora da estrutura de tm , defina o campo de tm_isdst :

  • Zero (0) para indicar que o horário padrão é aplicado.

  • Um valor maior que 0 para indicar que o horário de verão é aplicado.

  • Um valor menor que zero para ter o cálculo de código da biblioteca de tempo de execução C se a hora padrão ou o horário de verão estão em vigor.

A biblioteca de tempo de execução C usa uma variável do ambiente de TZ para determinar o tempo corretos do horário de verão. Se a TZ não estiver definida, o sistema operacional é consultado para obter o comportamento regional correto do horário de verão. tm_isdst é um campo obrigatório. Se isso não estiver configurado, seu valor é indefinido e o valor de retorno de mktime é imprevisível.

O intervalo da função de _mkgmtime32 é meia-noite de, o 1º de janeiro de 1970, UTC para 19 de janeiro, 3:14: 07, 2038, UTC. O intervalo de _mkgmtime64 é meia-noite de, o 1º de janeiro de 1970, UTC como 23:59: o 31 de dezembro, 59, 3000, UTC. Resultados fora do escopo de uma data em um valor de retorno de – 1. O intervalo de _mkgmtime depende de _USE_32BIT_TIME_T está definido. Se não definiu (o padrão) que o intervalo é de _mkgmtime64; caso contrário, o intervalo é limitado ao intervalo de 32 bits de _mkgmtime32.

Observe que gmtime e localtime usam um único buffer estaticamente atribuído à conversão. Se você fornecer esse buffer a mkgmtime, os conteúdos anteriores serão destruídos.

Exemplo

// 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 );

}

Saída de Exemplo

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 é completada com os valores computados do dia da semana e dia 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 );

}

Saída

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

Referência

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