mktime, _mktime32, _mktime64

Convierte la hora local en un valor de calendario.

Sintaxis

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

Parámetros

timeptr
Puntero a la estructura de tiempo; consulte asctime.

Valor devuelto

_mktime32 devuelve la hora de calendario especificada codificada como valor de tipo time_t. Si timeptr hace referencia a una fecha anterior a la medianoche, 1 de enero de 1970 o si la hora del calendario no se puede representar, _mktime32 devuelve -1 conversión al tipo time_t. Si se usa _mktime32 y timeptr hace referencia a una fecha posterior a las 23:59:59 del 18 de enero de 2038, hora universal coordinada (UTC), devolverá –1 convertido en el tipo time_t.

_mktime64 devolverá –1 convertido en el tipo __time64_t si timeptr hace referencia a una fecha posterior a las 23:59:59 del 31 de diciembre de 3000, UTC.

Comentarios

Las funciones mktime, _mktime32 y _mktime64 convierten la estructura de tiempo proporcionada (posiblemente incompleta) a la que señala timeptr en una estructura totalmente definida con valores normalizados y, después, la convierte en un valor de tiempo de calendario de time_t. El tiempo convertido tiene la misma codificación que los valores devueltos por la función time. Se omiten los valores originales de los componentes tm_wday y tm_yday de la estructura timeptr, y los valores originales de los demás componentes no se limitan a los intervalos normales.

mktime es una función insertada equivalente a _mktime64, a menos que _USE_32BIT_TIME_T esté definido, en cuyo caso equivale a _mktime32.

Después de un ajuste a la hora UTC, _mktime32 controla las fechas desde la medianoche del 1 de enero de 1970 hasta las 23:59:59 del 18 de enero de 2038, hora UTC. _mktime64 controla las fechas desde la medianoche del 1 de enero de 1970 a las 23:59:59 del 31 de diciembre de 3000. Este ajuste puede hacer que estas funciones devuelvan -1 (convertido en time_t, __time32_t o __time64_t), aunque la fecha especificada esté dentro del intervalo. Por ejemplo, si está en El Cairo, Egipto, que es dos horas antes de utc, dos horas primero se restarán de la fecha especificada en timeptr; la resta ahora puede poner su fecha fuera del intervalo.

Estas funciones se pueden usar para validar y rellenar una estructura tm. Si se ejecutan correctamente, estas funciones establecen los valores de tm_wday y tm_yday como corresponda, y establecen los demás componentes de forma que representen la hora de calendario especificada, pero con los valores dentro de los intervalos normales. El valor final de tm_mday no se establece hasta que se determinen tm_mon y tm_year. Al especificar una estructura de hora de tm, establezca el campo tm_isdst en:

  • Cero (0) para indicar que está vigente la hora estándar.

  • Un valor mayor que 0 para indicar que está vigente el horario de verano.

  • Un valor menor que cero para que el código de la biblioteca en tiempo de ejecución de C calcule si está vigente la hora estándar o el horario de verano.

La biblioteca en tiempo de ejecución de C determinará el comportamiento del horario de verano partiendo de la variable de entorno TZ. Si TZ no está establecido, se usa la llamada a GetTimeZoneInformation de la API Win32 para obtener la información del horario de verano del sistema operativo. Si se produce un error en la llamada, la biblioteca supone que se usan las reglas de Estados Unidos para implementar el cálculo del horario de verano. tm_isdst es un campo obligatorio. Si no se establece, su valor es indefinido y el valor devuelto de estas funciones es imprevisible. Si timeptr señala a una estructura tm devuelta por una llamada anterior a asctime, gmtime o localtime (o a las variantes de estas funciones), el campo tm_isdst contiene el valor correcto.

Las gmtime funciones y localtime (y _gmtime32, _gmtime64, _localtime32y _localtime64) usan un único búfer por subproceso para la conversión. Si proporciona este búfer a mktime, _mktime32 o _mktime64, se destruye el contenido anterior.

Estas funciones validan su parámetro. Si timeptr es un puntero nulo, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, las funciones devuelven -1 y establecen errno en EINVAL.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Bibliotecas

Todas las versiones de las bibliotecas en tiempo de ejecución de C.

Ejemplo

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

Salida de ejemplo

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

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

Consulte también

Administración de tiempo
asctime, _wasctime
gmtime, _gmtime32, _gmtime64
localtime, _localtime32, _localtime64
_mkgmtime, _mkgmtime32, _mkgmtime64
time, _time32, _time64