Las páginas de información para el comando GNU date
contiene este ejemplo:¿Cómo convertir programáticamente una hora de una zona horaria a otra en C?
Por ejemplo, con el GNU
date
de comandos que puede responder a la pregunta "¿Qué hora es en Nueva York, cuando un reloj París muestra 6 : 30 am en octubre 31, 2004? " mediante el uso de una fecha de inicio con `TZ = "Europa/París" 'como se muestra en la siguiente transcripción shell:$ export TZ="America/New_York" $ date --date='TZ="Europe/Paris" 2004-10-31 06:30' Sun Oct 31 01:30:00 EDT 2004
En este ejemplo, el '--date' operando comienza con su propia' TZ ' configuración, por lo que el resto de ese operando se procesa de acuerdo con ' Europa/París 'reglas, tratando el cadena
2004-10-31 06:30
como si fuera en París. Sin embargo, dado que la salida del comandodate
es procesada de acuerdo con las reglas generales de zona horaria , usa la hora de Nueva York . (París era normalmente seis horas por delante de Nueva York en 2004, pero esta ejemplo se refiere a un breve período de Halloween cuando la diferencia fue de cinco horas.)
que estoy tratando de lograr esencialmente la misma cosa mediante programación en C sin llamar al programa date
millones de veces. Básicamente, estoy buscando una manera de tomar una fecha y hora arbitraria en una zona horaria y convertirla a la fecha y hora equivalentes en otra zona horaria, ya sea directamente o a través de la conversión hacia y desde UTC. No me importan los formatos del tiempo de entrada y salida, siempre que pueda manipularlos usando funciones estándar (strftime
/strptime
/mktime
/etc).
El programa date
parece lograr esto usando rutinas complejas internas al paquete coreutils
, estoy buscando una forma de hacerlo en C usando rutinas POSIX/Linux estándar o una biblioteca externa. Miré a zoneinfo un poco que parecía prometedor pero no puedo encontrar ninguna biblioteca para hacer algo útil con él.
Hay una serie de cuestiones sutiles relacionadas con los cálculos manuales que trato de evitar, tales como tener que manejar como DST. Esta información está contenida en la base de datos de zoneinfo, pero no de una manera que me haya resultado útil hasta ahora. –
Por ej., Esto funciona especialmente mal en Venezuela, que es oficialmente UTC-4: 30 – Quintus