¿La mejor manera de convertir time_t de Unix a / desde zonas horarias abitrarias?

Mi código recibe un time_t de una fuente externa. Sin embargo, ese time_t no se basa realmente en el tiempo de época UTC, junto con él obtengo una cadena de zona horaria (por ejemplo, EDT, PST, etc.), y se basa en esta época desplazada. Necesito convertir esto en un verdadero time_t basado en la época UTC.

Además, necesito poder ir en la dirección opuesta, tomando un time_t basado en UTC Epoch y una zona horaria, y crear el time_t compensado, pero en esta situación en lugar de tener una zona horaria como EDT / PST), etc., tengo un Descripción de zona horaria estilo Unix como "América / Nueva York" y necesito convertir a la zona horaria correcta dado el horario de verano, por lo que tendría que volver del algoritmo, tanto un time_t compensado como el descriptor correcto (EDT, EST).

Estoy bastante seguro de que puedo lograr esto cambiando temporalmente tzset () y alguna combinación de conversiones entre tiempo desglosado, time_t y timeval, pero hacer esto siempre hace que mi cerebro duela y me hace sentir que me estoy perdiendo algo obvio. . ¿Alguien puede recomendar algún código o código sudo para hacer esto o al menos un enfoque adecuado?

preguntado el 25 de julio de 10 a las 11:07

No hay nada obvio o apropiado (o claro o feliz) acerca de la manipulación del tiempo en ningún idioma. tzset () y localtime () / strftime () son lo mejor, en mi opinión. -

2 Respuestas

time_t es en segundos, así que solo compensa tu time_t valores por 3600 veces el número de horas por las que se compensa la zona horaria. Siempre que tenga el desplazamiento identificado específicamente (es decir, EST o EDT en lugar de EE. UU./Este o EST5EDT o lo que sea), esto es realmente simple y no propenso a errores.

Respondido 25 Jul 10, 15:07

Gracias, en una dirección tengo el EDT / EST, aunque en la otra solo tengo América / Nueva York. ¿Existe una función estándar para tomar un timezeone (EDT, EST, etc.) y devolver la diferencia horaria? - bdk

No, y desafortunadamente, los nombres de las zonas horarias no son únicos a nivel mundial. Si solo necesita admitir zonas horarias de EE. UU., Puede codificarlas usted mismo y terminar con eso. - R .. GitHub DEJA DE AYUDAR A ICE

¿Alguno de estas funciones ¿ayudarte? localtime (), gmtime (), etc.

Respondido 25 Jul 10, 15:07

Estos son los que suelo usar para tareas como esta junto con varios otros comandos de manipulación del tiempo. Lo que tengo problemas es averiguar el encadenamiento correcto de todos los diferentes comandos y formatos de datos y conversiones para lograr lo que quiero, ya que ninguno de ellos hace el trabajo real. - bdk

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.