zona para mexico horaria hora eta cual configurar como cambiar c++ boost timezone boost-date-time

c++ - para - zona horaria mexico gmt



¿Cómo obtener la zona horaria actual? (5)

Bueno, tal vez podrías hacerlo usando la biblioteca GeoIP. Sé que es un poco exagerado, pero como la mayoría de las computadoras del mundo están conectadas a Internet, probablemente puedas salirte con la tuya. De acuerdo con el chico que estoy desarrollando, ha sido más del 99% de precisión.

Nota: Esta es una idea tonta. Solo estoy buscando respuestas.

En la mayoría de los ejemplos que había visto:

time_zone_ptr zone( new posix_time_zone("MST-07") );

Pero solo quiero obtener la zona horaria actual para la máquina que ejecuta el código. No quiero codificar el nombre de la zona horaria.


Muy tarde en el día, pero estaba buscando algo similar, así que esto puede ayudar a otros. La siguiente forma (sin impulso) de usar strftime parece funcionar en la mayoría de las plataformas:

time_t ts = 0; struct tm t; char buf[16]; ::localtime_r(&ts, &t); ::strftime(buf, sizeof(buf), "%z", &t); std::cout << "Current timezone: " << buf << std::endl; ::strftime(buf, sizeof(buf), "%Z", &t); std::cout << "Current timezone: " << buf << std::endl;

O uno puede usar std :: time_put para una versión pura de C ++.


Para responder correctamente a esta pregunta, es importante comprender que el soporte de zona horaria en Boost está muy limitado.

  • Se centra principalmente en las zonas horarias POSIX, que tienen varias limitaciones. Estas limitaciones se discuten en la sección POSIX de la wiki de etiqueta de zona horaria , por lo que no las repetiré aquí.

  • Tiene funciones que funcionan con identificadores de zonas horarias de IANA / Olson, pero las mapea artificialmente con valores POSIX, lo que tiene el efecto de acoplar la zona horaria a un único punto en el historial. Estas asignaciones se almacenan en un archivo csv en el código fuente de Boost.

  • El archivo csv no se ha actualizado desde abril de 2011, y desde entonces se han realizado muchos cambios en las zonas horarias. Entonces, las asignaciones que tiene son algo inexactas.

En general, no recomendaría Boost para trabajar con husos horarios. En su lugar, considere las ICU la ICU , que son parte del proyecto de la ICU . Encontrará que estos son totalmente portátiles y tienen soporte de huso horario completo y correcto.

Vale la pena mencionar que la UCI se utiliza en muchas aplicaciones populares. Por ejemplo, el navegador web Google Chrome obtiene su soporte de zona horaria de la UCI.

En la UCI, la zona horaria actual del sistema local está disponible como la zona horaria predeterminada . Puede leer más en la sección "Métodos de fábrica y la zona horaria predeterminada" en la documentación de la UCI.


Plain posix: call tzset, use tzname .

#include <ctime> tzset(); time_zone_ptr zone(new posix_time_zone(tzname[localtime(0)->tm_isdst]));

Posix con adiciones glibc/bsd :

time_zone_ptr zone(new posix_time_zone(localtime(0)->tm_zone));

Lo anterior son zonas horarias de Posix abreviadas, definidas en términos de compensación de UTC y no estables en el tiempo (hay una forma más larga que puede incluir transiciones de horario de verano, pero no transiciones políticas e históricas).

ICU es portátil y tiene lógica para recuperar la zona horaria del sistema como una zona horaria Olson (fragmento por sumwale ):

// Link with LDLIBS=`pkg-config icu-i18n --libs` #include <unicode/timezone.h> #include <iostream> using namespace U_ICU_NAMESPACE; int main() { TimeZone* tz = TimeZone::createDefault(); UnicodeString us; std::string s; tz->getID(us); us.toUTF8String(s); std::cout << "Current timezone ID: " << s << ''/n''; delete tz; }

En Linux, ICU se implementa para que sea compatible con tzset y mira TZ y /etc/localtime , que en sistemas Linux recientes se especifica como un enlace simbólico que contiene el identificador Olson ( aquí está el historial ). Ver uprv_tzname para detalles de implementación.

Boost no sabe cómo usar el identificador de Olson. Podría construir un posix_time_zone utilizando los offsets DST y DST, pero en este punto, es mejor seguir usando la implementación de ICU. Vea estas preguntas frecuentes de Boost .


Siempre se puede tratar de obtener la hora universal y la hora local de impulsar y verificar la diferencia, sin embargo, es probable que esté llena de advertencias.