Condividi tramite


_mkgmtime, _mkgmtime32, _mkgmtime64

Converte un'ora UTC rappresentata da tm struct nell'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 struct tm da 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). Se è inclusa (vedere la sezione relativa alle osservazioni) o l'input non può essere interpretato come ora valido, il valore restituito sarà - 1.

Note

Le funzioni _mkgmtime64 e _mkgmtime32 convertono l'ora UTC in un tipo di __time64_t o di __time32_t che rappresenta l'ora UTC. Per convertire l'ora locale in ora UTC, utilizzare invece mktime, _mktime32 e _mktime64.

_mkgmtime è una funzione inline che valuta _mkgmtime64, e time_t equivale a __time64_t. Se è necessario forzare il compilatore ad interpretare time_tcome il vecchio 32 bit 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 pari a 32 bit time_t) e non è consentita alcuna delle piattaforme a 64 bit.

La struttura di tempo passata viene modificata come segue, ad esempio vengono modificate con le funzioni _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. Quando si specifica un'ora della struttura di tm, impostare il campo di tm_isdst :

  • Zero (0) per indicare che è in vigore l'ora standard.

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

  • Un valore minore di zero per fare in modo che il codice della libreria di runtime del linguaggio C determini se è in vigore l'ora standard oppure l'ora legale.

La libreria di runtime C utilizza la variabile di ambiente TZ per determinare il tempo corretto dell'ora legale del giorno. Se TZ non è impostato, il sistema operativo esegue una query per ottenere l'orario regionale corretto salvando il comportamento dell'orario. tm_isdst è un campo obbligatorio. Se non è impostato, il valore è indefinito ed il valore restituito da mktime è imprevedibile.

L'intervallo della funzione _mkgmtime32 è dalla mezzanotte, il 1° gennaio 1970, UTC fino al 19 gennaio, 3:14: 07, 2038, UTC. L'intervallo di _mkgmtime64 proviene dalla mezzanotte, il 1° gennaio 1970, UTC fino alle 23:59:59, il 31 dicembre, 3000, UTC. Risultati relativi alla data esterni all'intervallo restituiscono un valore -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.

Da notare che gmtime e localtime utilizzano un solo buffer allocato in modo statico per la conversione. Se si fornisce questo buffer a mkgmtime, i contenuti precedenti vengono eliminati in modo permanente.

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

Nell'esempio seguente viene illustrata 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 del 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