Herramientas de desarrollo · Convertidor de marca de tiempo Unix
Las zonas horarias no son compensaciones: la base de datos IANA tz y por qué es importante
· Antecedentes
marcas de tiempo zonas horarias APIS del navegador
Un desplazamiento es un número; una zona horaria es una historia de números y las reglas para cuando cambian. Esta publicación explica la diferencia, presenta la base de datos IANA tz que la codifica y muestra por qué los convertidores dependen de ella para la lectura local.
La reunión que avanzó una hora: un desplazamiento almacenado de +02:00 que fue correcto en julio y incorrecto en diciembre.
Un `+02:00` fijo guardado junto a una reunión de julio puede ser una lectura fiel para ese instante y aun así fallar como regla general para diciembre. La compensación es un resultado; la zona es el contexto de reglas capaz de producir resultados en diferentes fechas. Almacenar uno como si fuera el otro congela una instantánea.
La fila local de ToolAcre le pide a Intl que formatee cada fecha y solicita un desplazamiento numérico corto. No agrega una constante de configuración a la época. Ese diseño permite que la norma aplicable del entorno influya en cada instante por separado.
Desplazamiento versus zona: una distancia fija desde UTC versus una región nombrada con reglas de horario de verano y un historial de cambios
Un desplazamiento indica qué tan lejos está un reloj renderizado de UTC en un instante. Una región con nombre puede contener una secuencia de reglas de compensación y cambios históricos. La época misma no conlleva ninguna de las dos cosas. Estos conceptos deben ocupar campos separados cuando una aplicación necesita tanto un evento como un cronograma basado en un lugar.
Para un evento inmutable, almacenar el instante puede ser suficiente. Para "abrir en 09:00 en esta región todos los días", conserve la zona nombrada porque las instancias futuras deben resolverse desde el momento del muro. La reutilización del desplazamiento de ayer trata una regla dinámica como una propiedad numérica permanente.
La base de datos IANA tz: nombres del área/City, por qué es un registro de decisiones políticas y con qué frecuencia se actualiza
El libro de trabajo nombra la base de datos de la IANA, su procedencia política y su frecuencia de actualización. La implementación informa un nombre de zona estilo IANA de `resolvedOptions()` pero no expone una versión de la base de datos, un programa de actualización ni un paquete fuente. Esos detalles no se afirman aquí.
Esta limitación afecta la reproducción. Si la salida de la fecha anterior difiere entre máquinas, registre la cadena de zona y las versiones de la plataforma; no afirme qué conjunto de reglas es más nuevo basándose únicamente en el reloj. Una zona con nombre mejora la pregunta, pero el convertidor no es un inspector de datos de zona horaria.
Las aplicaciones que necesitan resultados históricos reproducibles deben controlar la dependencia de los datos de zona y probar las fechas representativas. Depender de un entorno de navegador no especificado delega esa reproducibilidad.
Esta implementación no expone la procedencia de la regla de zona nombrada ni la cadencia de actualización.
ToolAcre solicita al navegador su zona local y lo formatea a través de Intl. El repositorio no establece si las reglas provienen del sistema operativo, del paquete del navegador u otro componente de tiempo de ejecución. Detecta el fallo y retrocede de forma segura en lugar de exponer esa arquitectura interna.
En consecuencia, "local" significa el entorno seleccionado por el navegador en el momento de la conversión. Cambiar la configuración del dispositivo puede cambiar la salida sin cambiar la época. Para pistas de auditoría, conserve UTC y el recuento sin procesar; utilice la visualización local como contexto en lugar del almacenamiento canónico.
El retorno a ISO en caso de falla del formateador conserva un instante pero pierde la presentación local solicitada. Los consumidores deben tratar esto como un contexto de visualización reducido, no como un cambio de fecha.
El navegador selecciona y formatea su zona local; la fuente de sus reglas no se afirma
Elija dos instantes UTC con seis meses de diferencia, como `2025-01-15T12:00:00Z` y `2025-07-15T12:00:00Z`, conviértalos a segundos e inspeccione las filas locales en un dispositivo. Registre si el desplazamiento numérico difiere. La observación es válida para la zona y el entorno mostrados.
El libro de trabajo prescribía compensaciones de Europa/Berlin, pero esas reglas de zonas nombradas no se leyeron desde la implementación. Este ejercicio reproducible evita una tabla no compatible y al mismo tiempo enseña la misma distinción: una consulta de zona, dos instantes y potencialmente dos resultados de compensación.
Si las compensaciones coinciden, la observación sigue siendo informativa: esa zona configurada no expuso una diferencia estacional en esos instantes elegidos en ese entorno.
Ejemplo resuelto: observar una zona del navegador en dos fechas en lugar de codificar las reglas de Berlín
El panel solicita `timeZoneName: "shortOffset"`, lo que favorece una relación numérica como GMT+1 sobre una abreviatura regional. Esa elección reduce la dependencia de etiquetas cuyo significado puede variar según el contexto, aunque el formato Intl exacto sigue siendo el resultado de la plataforma.
Para los datos almacenados, utilice identificadores de zona canónicos definidos por la biblioteca elegida por la aplicación en lugar de mostrar abreviaturas. Una etiqueta breve orientada al usuario puede resultar útil, pero no debería convertirse en la clave que reconstruya un cronograma futuro.
Las compensaciones numéricas permanecen inequívocas como aritméticas en un instante. Su limitación es la falta de identidad de la regla, no la incapacidad de asignar la lectura de un reloj a UTC.
Se evitan las abreviaturas en los datos almacenados; el formateador solicita un desplazamiento numérico corto
La programación futura recurrente necesita brechas, superposiciones y manejo de políticas que este convertidor no proporciona. Comienza con una fecha o época resuelta y la representa. No elige entre dos horarios locales repetidos ni repara uno inexistente.
Utilice una biblioteca de programación con reconocimiento de zonas cuyo comportamiento se prueba según sus requisitos, luego inspeccione las ocurrencias resueltas aquí si es útil. Separar la resolución de la pantalla evita que un simple convertidor se convierta en un programador accidental con una política de borde indefinida.
La salida del programador se puede almacenar como una época para su ejecución mientras se conserva la zona y la intención del tiempo de pared original para futuros recálculos o explicaciones.
Conclusión: almacene instantes como épocas, almacene lugares como nombres de zonas y cómo el conversor de marcas de tiempo de Unix utiliza la zona de su navegador para la lectura local
Almacene instantes como unidades de época explícitas o cadenas UTC canónicas, y almacene zonas con nombre cuando el lugar en sí sea importante. Un desplazamiento puede acompañar a una salida para su explicación, pero no sustituye a ninguno de los campos. Las filas UTC y locales de ToolAcre demuestran esa separación.
Cuando un resultado local lo sorprenda, verifique la etiqueta de zona, el instante y el desplazamiento antes de cambiar los datos. Un parche con compensación fija puede hacer que una fecha parezca correcta y otra incorrecta. El modelo duradero mantiene el evento estable y permite que una regla de zona verificada suministre la esfera del reloj.
Este modelo también admite viajes: un usuario puede ver un instante almacenado en una nueva zona local sin reescribir el evento ni perder su contexto de programación original.