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
, _localtime32
y _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