Share via


_mkgmtime, _mkgmtime32, _mkgmtime64

convierte una hora UTC representada por tmstruct a una hora UTC representada por un tipo de time_t .

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

Parámetros

  • timeptr
    un puntero a la hora UTC como structtm de convertir.

Valor devuelto

Una cantidad de __time32_t cualquiera de __time64_t que representa el número de segundos transcurridos desde la medianoche, el 1 de enero de 1970, en hora universal coordinada (UTC) (UTC).Si la fecha está fuera de intervalo (vea la sección comentarios) o la entrada no se puede interpretar como hora válido, el valor devuelto es – 1.

Comentarios

Las funciones de _mkgmtime32 y de _mkgmtime64 convierte una hora UTC en __time32_t o a __time64_t tipo representa la hora en la hora UTC.Para convertir una hora local a la hora UTC, utilice mktime, _mktime32, y _mktime64 en su lugar.

_mkgmtime es una función inline que se evalúa como _mkgmtime64, y time_t es equivalente a __time64_t.Si necesita hacer que el compilador para interpretar time_tcomo time_tde 32 bits anterior, puede definir _USE_32BIT_TIME_T.Esto no es recomendable porque la aplicación podría producir un error después del 19 de enero de 2038 (el intervalo máximo de time_tde 32 bits), y no se permite en plataformas de 64 bits.

La estructura de tiempo pasado se cambiará como sigue, de la misma forma que se modifican con las funciones de _mktime : los campos de tm_wday y de tm_yday se establecen en los nuevos valores basados en valores de tm_mday y de tm_year.Al especificar un tiempo de la estructura de tm , establezca el campo de tm_isdst :

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

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

  • Un valor inferior a cero para obtener el cálculo del código de la biblioteca en tiempo de ejecución de C si la hora estándar o tiempo de guardar de luz está vigente.

La biblioteca en tiempo de ejecución de C utiliza la variable de entorno t-z para determinar el horario de verano correcto.Si no se establece t-z, el sistema operativo se consulta para obtener el comportamiento regional correcto del horario de verano.tm_isdst es un campo obligatorio.Si no establece, su valor es indefinido y el valor devuelto de mktime es imprevisible.

El intervalo de la función de _mkgmtime32 es la medianoche, el 1 de enero de 1970, hora UTC 19 de enero, 3:14: 07, 2038, la hora UTC.El intervalo de _mkgmtime64 es la medianoche, el 1 de enero de 1970, hora UTC a 23:59: 59, el 31 de diciembre, 3000, la hora UTC.Una fecha fuera produce un valor devuelto de – 1.El intervalo de _mkgmtime depende de si _USE_32BIT_TIME_T está definido.Si no definido (valor predeterminado) el intervalo es el de _mkgmtime64; si no, se limita al intervalo de 32 bits de _mkgmtime32.

Observe que gmtime y localtime utilizan un único búfer estáticamente asignado para la conversión.Si proporciona este búfer a mkgmtime, se destruyen los contenido anteriores.

Ejemplo

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

}

Resultados del ejemplo

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

El ejemplo siguiente se muestra cómo la estructura incompleta se completa con los valores calculados del día de la semana y el día del año.

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

Vea también

Referencia

Administración de tiempo

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