_mkgmtime, _mkgmtime32, _mkgmtime64

Converte un'ora UTC rappresentata da tmstruct all' ora UTC rappresentata da un tipo di time_t .

time_t _mkgmtime(
   struct tm* timeptr
);
__time32_t _mkgmtime32(
   struct tm* timeptr
);
__time64_t _mkgmtime64(
   struct tm* timeptr
);

Parametri

  • timeptr
    Un puntatore all' ora UTC come structtm convertire.

Valore restituito

Una quantità di tipo __time32_t o __time64_t che rappresenta il numero di secondi trascorsi dalla mezzanotte, il 1° gennaio 1970, al momento dell' ora UTC (Coordinated Universal Time (UTC)).Se è esterna all' intervallo (vedere la sezione relativa alle osservazioni) o un input non può essere interpretato come ora valido, il valore restituito è a 1.

Note

Le funzioni di _mkgmtime64 e di _mkgmtime32 convertono l'ora UTC a un tipo di __time64_t o di __time32_t che rappresenta l'ora UTC.Per convertire l'ora locale in ora UTC, da utilizzare mktime, a _mktime32e a _mktime64 anziché.

_mkgmtime è una funzione inline che dà come risultato _mkgmtime64e time_t equivale a __time64_t.Se è necessario che il compilatore per interpretare time_tcome il 32 bit obsoleto time_t, è possibile definire _USE_32BIT_TIME_T.Questa operazione non è consigliabile perché l'applicazione potrebbe non riuscire dopo il 19 gennaio 2038 (l'intervallo massimo di un 32 bit time_t) e non è consentita alcuna delle piattaforme a 64 bit.

La struttura di tempo viene passato viene modificata come segue, ad esempio modificati con le funzioni di _mktime : i campi di tm_yday e di tm_wday sono impostati sui nuovi valori basati sui valori di tm_mday e di tm_year.In specificare un'ora della struttura di tm , impostare il campo di tm_isdst :

  • Zero (0) per indicare che l'ora solare è attiva.

  • Un valore maggiore di 0 indica che l'ora legale è attiva.

  • Un valore minore di zero in modo che il calcolo di codice della libreria di runtime del linguaggio C se l'ora solare o l'ora legale è attiva.

La libreria di runtime C viene utilizzata la variabile di ambiente di t-z per determinare il tempo corretto di ora legale del giorno.Se la t-z non è impostata, il sistema operativo viene eseguita una query per ottenere il comportamento regionale corretto di tempo di ora legale del giorno.tm_isdst è un campo obbligatorio.Se non impostata, il valore viene definito e il valore restituito da mktime sarà imprevedibile.

L'intervallo della funzione di _mkgmtime32 proviene dalla mezzanotte, il 1° gennaio 1970, UTC a il 19 gennaio, 3:14: 07, 2038, UTC.L'intervallo di _mkgmtime64 proviene dalla mezzanotte, il 1° gennaio 1970, UTC a 23:59: 59, il 31 dicembre, 3000, UTC.Risultati relativi alla data esterni all' intervallo in un valore restituito a 1.L'intervallo di _mkgmtime varia a seconda che _USE_32BIT_TIME_T è definito.Se non definito (impostazione predefinita) l'intervallo è quello di _mkgmtime64; in caso contrario, l'intervallo è limitato all' intervallo di 32 bit di _mkgmtime32.

Si noti che gmtime e localtime utilizzano un solo buffer statico allocato per la conversione.Se si specifica questo buffer su mkgmtime, i contenuti precedenti vengono eliminati.

Esempio

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

}

Esempio di output

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

In l ' esempio seguente viene illustrato come la struttura incompleta viene compilata di valori calcolati del giorno della settimana e del giorno dell' anno.

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

Vedere anche

Riferimenti

Gestione di 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