Tengo un problema extraño en el que el reloj de mi sistema sabe que es hora de ahorro de luz diurna, pero glibc parece no tenerlo. Esta es una instalación actualizada de Ubuntu, y he comprobado/etc/localtime y tiene el tiempo de cambio correcto para el cambio a DST de la semana pasada.¿Por qué glibc "timezone" global no está de acuerdo con el tiempo del sistema en DST?
La zona horaria correcta actual para mí es Pacific Daylight Time (UTC-7). Cuando le pregunto a mi sistema en que zona horaria en que estoy, me dice correctamente:
$ date +%z
-0700
Pero cuando corro el siguiente programa:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
La salida es, de forma incorrecta:
28800
que corresponde a UTC-8, o hora estándar del Pacífico. (Y no, TZ no está configurado en mi entorno)
Pensé que glibc y el programa de fecha obtendrían su información de zona horaria de la misma fuente, pero aparentemente no lo hacen o no entiendo cómo la zona horaria glibc trabajos globales.
Las preguntas básicas son entonces:
- ¿Por qué estos dos salidas diferentes
- ¿Cómo puedo detectar de manera fiable el sistema de desplazamiento desde un programa en C UTC?
Mi lectura de la página de manual para tzset indica que la variable dayllight solo indica si la zona local usa el horario de verano en algún momento, y no necesariamente indica si está vigente actualmente. –
Creo que estoy de acuerdo contigo. Sugeriría {time_t t = time (NULL); printf ("% d \ n", (int) difftime (mktime (gmtime (& t)), t)); } pero eso me da el mismo resultado que "zona horaria". –