La sorprendente lucha para obtener una marca de tiempo de época UNIX a partir de una cadena UTC en C o C++

2025-01-19
La sorprendente lucha para obtener una marca de tiempo de época UNIX a partir de una cadena UTC en C o C++

Este artículo profundiza en las complejidades de convertir cadenas de tiempo UTC en marcas de tiempo Unix en C/C++. El autor descubre comportamientos inesperados en las funciones de manejo de tiempo POSIX en varias bibliotecas y lenguajes C. El enfoque está en el uso de las funciones `strptime()`, `mktime()` y `timegm()`, destacando problemas con el horario de verano y las configuraciones regionales. Se proporcionan soluciones, incluyendo el uso de `timegm()` para tiempos UTC y el aprovechamiento de flujos C++ para evitar problemas de configuración regional. El artículo concluye recomendando bibliotecas de manejo de tiempo más robustas disponibles en C++20 y posteriores, como la biblioteca tz de Howard Hinnant.

Desarrollo