Condividi tramite


mktime, _mktime32, _mktime64

Converte l'ora locale in un valore di calendario.

time_t mktime(    struct tm *timeptr  ); __time32_t _mktime32(    struct tm *timeptr  ); __time64_t _mktime64(    struct tm *timeptr  );

Parametri

  • timeptr
    Puntatore alla struttura temporale. Vedere asctime.

Valore restituito

_mktime32 restituisce l'ora di calendario specificata codificata come valore di tipo time_t. Se timeptr fa riferimento a una data precedente alla mezzanotte dell'1 gennaio 1970, oppure se non è possibile rappresentare l'ora di calendario, _mktime32 restituisce –1 con cast al tipo time_t. Quando si usa _mktime32 e timeptr fa riferimento a una data successiva alle ore 03.14.07 del 19 gennaio 2038 UTC, verrà restituito –1 con cast al tipo time_t.

_mktime64 restituirà –1 con cast al tipo __time64_t se timeptr fa riferimento a una data successiva alle ore 23.59.59 del 31 dicembre 3000 UTC.

Note

Le funzioni mktime, _mktime32 e _mktime64 convertono la struttura temporale fornita (possibilmente incompleta) a cui punta timeptr in una struttura completamente definita con valori normalizzati, quindi la converte in un valore di calendario time_t. L'ora convertita presenta la stessa codifica usata per i valori restituiti dalla funzione time. I valori originali dei componenti tm_wday e tm_yday della struttura timeptr vengono ignorati e i valori originali degli altri componenti non sono limitati ai relativi intervalli normali.

mktime è una funzione inline equivalente a _mktime64, a meno che non sia definito _USE_32BIT_TIME_T, nel qual caso è equivalente a _mktime32.

Dopo una regolazione dell'ora UTC, _mktime32 gestisce le date dalla mezzanotte dell'1 gennaio 1970 alle ore 03.14.07 del 19 gennaio 2038. _mktime64 gestisce le date dalla mezzanotte dell'1 gennaio 1970 alle ore 23.59.59 del 31 dicembre 3000. Come conseguenza della regolazione, queste funzioni potrebbero restituire -1 (con cast a time_t, __time32_t o __time64_t) anche se la data specificata si trova nell'intervallo. Se ad esempio ci si trova a Il Cairo, Egitto, che è due ore avanti rispetto a UTC, verranno innanzitutto sottratte due ore dalla data specificata in timeptr. Ciò potrebbe causare l'uscita dall'intervallo della data fornita.

Queste funzioni possono essere usate per convalidare e compilare una struttura tm. Se hanno esito positivo, queste funzioni impostano i valori di tm_wday e tm_yday come appropriato e impostano gli altri componenti in modo da rappresentare la data di calendario specificata, ma con intervalli normali imposti sui relativi valori. Il valore finale di tm_mday non viene impostato fino alla determinazione di tm_mon e tm_year. Quando si specifica una struttura temporale tm,impostare il campo tm_isdst su:

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

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

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

La libreria di runtime C determinerà le impostazioni relative al comportamento dell'ora legale in base alla variabile di ambiente TZ. Se TZ non è impostata, viene usata la chiamata API Win32 GetTimeZoneInformation per ottenere le informazioni sull'ora legale dal sistema operativo. Se anche questo metodo non riesce, la libreria presupporrà l'uso delle regole relative agli Stati Uniti per implementare il calcolo dell'ora legale. tm_isdst è un campo obbligatorio. Se non impostato, il relativo valore resta non definito e il valore restituito da queste funzioni è imprevedibile. Se timeptr punta a una struttura tm restituita da una precedente chiamata a asctime, gmtime o localtime (o varianti di queste funzioni), il campo tm_isdst conterrà il valore corretto.

Si noti che gmtime e localtime (così come _gmtime32, _gmtime64, _localtime32 e _localtime64) usano un singolo buffer per thread per la conversione. Se si fornisce questo buffer a mktime, _mktime32 o _mktime64, i contenuti precedenti verranno eliminati.

Queste funzioni convalidano il proprio parametro. Se timeptr è un puntatore Null, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, le funzioni restituiranno -1 e imposteranno errno su EINVAL.

Requisiti

Routine

Intestazione obbligatoria

mktime

<time.h>

_mktime32

<time.h>

_mktime64

<time.h>

Per altre informazioni sulla compatibilità, vedere la sezione Compatibilità nell'introduzione.

Librerie

Tutte le versioni delle librerie di runtime C.

Esempio

// crt_mktime.c
/* The example takes a number of days
 * as input and returns the time, the current
 * date, and the specified number of days.
 */

#include <time.h>
#include <stdio.h>

int main( void )
{
   struct tm  when;
   __time64_t now, result;
   int        days;
   char       buff[80];

   time( &now );
   _localtime64_s( &when, &now );
   asctime_s( buff, sizeof(buff), &when );
   printf( "Current time is %s\n", buff );
   days = 20;
   when.tm_mday = when.tm_mday + days;
   if( (result = mktime( &when )) != (time_t)-1 ) {
      asctime_s( buff, sizeof(buff), &when );
      printf( "In %d days the time will be %s\n", days, buff );
   } else
      perror( "mktime failed" );
}

Esempio di output

Current time is Fri Apr 25 13:34:07 2003

In 20 days the time will be Thu May 15 13:34:07 2003

Equivalente .NET Framework

System::DateTime::DateTime

Vedere anche

Riferimenti

Gestione del tempo

asctime, _wasctime

gmtime, _gmtime32, _gmtime64

localtime, _localtime32, _localtime64

_mkgmtime, _mkgmtime32, _mkgmtime64

time, _time32, _time64