| archivos tz(5) | File Formats Manual | archivos tz(5) |
archivos tz - información de zona horaria
Los archivos de información de zona horaria utilizados por tzset(3) suelen encontrarse en el directorio /usr/share/zoneinfo o similar. Estos archivos utilizan el formato descrito en el RFC 8536. Cada archivo es una secuencia de bytes de 8 bits. En un archivo, un entero binario se representa mediante una secuencia de uno o más bytes en orden de red (bigendian o byte de orden superior primero), con todos los bits representativos, un entero binario con signo se representa mediante complemento a dos y un booleano se representará por un entero binario de un byte que es 0 (falso) o 1 (verdadero). El formato comienza con un encabezado de 44 bytes que contiene los siguientes campos:
El encabezado anterior va seguido de los siguientes campos, cuyas longitudes dependen del contenido de dicho encabezado:
struct ttinfo {
int32_t tt_utoff;
unsigned char tt_isdst;
unsigned char tt_desigidx;
};
Cada estructura se escribirá como un valor entero de cuatro bytes con signo para tt_utoff, en orden de bytes según la red, seguido de un valor booleano de un byte para tt_isdst y de otro byte para tt_desigidx. Para cada estructura, tt_utoff dará el número de segundos que se agregarán a UT, tt_isdst indica si tm_isdst debe establecerse mediante localtime(3) y tt_desigidx es el índice en el vector de bytes de abreviatura de zona horaria que van después de las entradas ttinfo en el archivo. Si la cadena designada es '-00', la entrada ttinfo es un marcador de posición que indica que la hora local no está definida. El valor tt_utoff nunca es igual a -2**31, para permitir que los clientes de 32 bits lo nieguen sin dar error. Además, en aplicaciones en productivo tt_utoff está en el intervalo [-89999, 93599] (es decir, más de -25 horas y menos de 26 horas). Esto hace que sea sencillo proporcionar soporte a las implementaciones que ya admiten el rango requerido por POSIX [-24:59:59, 25:59:59].
Los indicadores estándar/pared y UT/local fueron diseñados para transformar los tiempos de transición de un archivo TZif en transiciones apropiadas para otra zona horaria especificada a través de una cadena TZ al estilo POSIX.1-2017 que carece de reglas. Por ejemplo, cuando TZ='EET-2EEST' y no hay archivo TZif ' EET *-2EAST', la idea era adaptar los tiempos de transición de un archivo de TZIF con el conocido nombre 'posixrules' que está presente sólo para este propósito y es una copia del archivo 'Europe/Brussels', archivo con un espaciado UT diferente. POSIX no define este comportamiento de transformación obsoleto, las reglas predeterminadas son dependientes del sistema, y no se conoce ninguna implementación que soporte esta característica para marcas de tiempo más allá de 2037, por lo que los usuarios que deseen (por ejemplo) hora griega deberán indicar TZ='Europa/Atenas' para mayor seguridad, volviendo a TZ='EET-2EEST,M3.5.0/3,M10.5.0/4' si se requiere conformidad con POSIX y no necesita manejar con precisión las marcas de tiempo antiguas.
La función localtime(3) suele utilizar la primera estructura ttinfo del archivo si tzh_timecnt es cero o el argumento de tiempo es menor que el primer tiempo de transición registrado en el archivo.
Esta página de manual documenta el archivo <tzfile.h> del código fuente de glibc, consulte timezone/tzfile.h.
It seems that timezone(3) uses tzfile internally, but glibc refuses to expose it to userspace. This is most likely because the standardised functions are more useful and portable, and actually documented by glibc. It may only be in glibc just to support the non-glibc-maintained timezone data (which is maintained by some other entity).
Para los archivos de zona horaria de esta segunda versión del formato, al encabezado y los datos anteriores le sigue un segundo encabezamiento y datos, idénticos en formato, salvo que se usan ocho bytes para cada tiempo de transición o segundo intercalar. Se siguen disponiendo de 4 bytes para el recuento de segundos intercalares.Después del segundo encabezado y de los datos viene una cadena encerrada entre nuevas líneas al estilo del contenido de una variable de entorno POSIX.1-2017 TZ, para usar en el manejo de instantes después del último tiempo de transición almacenado en el archivo o para todos los instantes si el arquivo no tiene transiciones. La cadena TZ estará vacía (es decir, no hay nada entre las nuevas lineas) si no hay representación en el estilo POSIX.1-2017 para esos instantes. Si no está vacío, la cadena TZ debe coincidir con el tipo de tiempo local después del último tiempo de transición si está presente en los datos de ocho bytes; por ejemplo, dada la cadena “WET0WEST,M3.5.0/1,M10.5.0” entonces si el último tiempo de transición es en julio, el tipo de tiempo local de la transición debe definir un tiempo de cambio de hora verano/invierno abreviado “WEST” es una hora al este de UT. También, si hay al menos una transición, el tipo de tiempo 0 se asocia con el período de tiempo desde el pasado indefinido hasta, pero no inclusive, el primer tiempo de transición.
Para archivos de zona horaria de formato de versión 3, la cadena TZ puede usar dos extensiones menores del formato POSIX 1-2017 TZ, tal como se describe en newtzset(3). En primer lugar, la parte de las horas de sus tiempos de transición pueden tener signo y varían entre -167 y 167 en lugar de los valores requeridos por POSIX (entre 0 y 24). En segundo lugar, el horario de verano está en vigor durante todo el año si comienza el 1 de enero a las 00:00 y termina el 31 de diciembre a las 24:00, más la diferencia entre el horario de verano y la hora estándar.
Para los archivos TZif en la versión 4 del formato, el primer segundo intercalar puede tener una corrección distinta de +1 y de -1, para representar la partición al inicio del archivo TZIF. Asimismo, si hay dos o más transiciones de segundo intercalar y la corrección de la última entrada es igual a la anterior, la entrada última denota la expiración de la tabla de segundos intercalares en lugar de denotar la de un segundo intercalar. Las marcas de tiempo después de esta expiración son poco fiables y es probable que se añadan entradas de segundos intercalares después de dicho expirado, que cambiarán la forma en que se tratan las marcas de tiempo posteriores a ese instante.
Los futuros cambios en el formato pueden añadir más datos.
Los archivos de la versión 1 se consideran obsoletos y no deben emplearse. No admiten tiempos de transición después del año 2038. Las aplicaciones que sólo entienden la versión 1 deben ignorar cualquier dato que se extienda más allá del final del bloque de datos de la versión 1.
Aparte de la versión 1, las aplicaciones que cree estos archivos deben generar el número de versión más bajo necesario para trabajar con los datos de un archivo. Por ejemplo, se debe generar un archivo de versión 4 sólo si su tabla de segundos intercalares expira o se truncó al inicio. Una aplicación que no genera un archivo de versión 4 debería generar un archivos de versión 3 sólo si las extensiones de cadenas TZ son necesarias para gestionar con precisión los tiempos de transición.
La secuencia de cambios de hora definida por el encabezado de la versión 1 y el bloque de datos deben ser una subsecuencia contigua de los cambios de hora definidos por el encabezado de las versiones 2+, el bloque de datos y por el pie. Esta guía ayuda a las aplicaciones que utilicen la (obsoleta) versión 1 para que hagan la misma interpretación de las marcas de tiempos dentro de la subsecuencia contigua. También permite, a las aplicaciones que generan estos archivos y que no consideran a los lectores más antiguos, usar un tzh_timecnt de cero en el bloque de datos de la versión 1 para ahorrar espacio.
Cuando un archivo TZif indica la fecha de caducidad de la tabla de segundos intercalares, los lectores de TZIF no deberían procesar marcas de tiempo posteriores a esta fecha, o procesarlos como si no existiera esta fecha de caducidad incluso indicándolo con un mensaje de error.
Las designaciones de zona horaria deberán consistir en al menos tres (3) y no más de seis (6) caracteres ASCII alfanuméricos, “-”, y “+”. Para preservar la compatibilidad con los requisitos de POSIX para las abreviaturas de zonas horarias.
Al leer un archivo de versión 2 o superior, se deberá ignorar el encabezado de la versión 1 y el bloque de datos, simplemente saltándolos.
Las aplicaciones que lean estos archivos debarán calcular las longitudes totales de los encabezados y bloques de datos y comprobar que todos ellos se ajustan dentro del tamaño real del archivo, como parte de la verificación de la validez del archivo.
Cuando debe introducirse un segundo de intercalación, las aplicaciones deben añadir un segundo adicional al minuto local que contiene el segundo justo antes de dicho segundo de intercalación. Si esto ocurre cuando el desvío UTC no es un múltiplo de 60 segundos, el segundo de intercalación se introduce antes que el último segundo del minuto local y los segundos locales restantes del minuto se numeran a través de 60 en lugar de 59 que sería lo habitual. No afecta al desplazamiento UTC.
En esta sección se detallan problemas comunes al leer o escribir archivos TZif. La mayoría suelen ser ocurrir durante la generación de archivos TZif para el uso de las aplicaciones más antiguas. Los objetivos de esta sección son:
Uno de los objetivos al definir nuevas versiones del formato TZif ha sido que un lector pueda usar un archivo TZIF incluso si el archivo es de una versión posterior para la que el lector fue diseñado. Cuando no se logra una compitbilidad total, se intenta limitar los errores a las marcas de tiempo menos frecuentes y permitir soluciones parciales simples para que las nuevas aplicaciones puedan generar archivos legibles para aquellas aplicaciones diseñadas para interpretar versiones más antiguas. Esta sección intenta documentar estosproblemas de compatibilidad aportando soluciones, así como documentar otros errores comunes en la interpretación que las aplicaciones hacen de estos archivos.
Los problemas de interoperabilidad con TZif incluyen los siguientes:
A continuación, se enumeran algunos problemas de interoperabilidad principalmente como advertencias para los desarrolladores de aplicaciones que lean estos archivos.
time(2), localtime(3), tzset(3), tzselect(8), zdump(8), zic(8).
Olson A, Eggert P, Murchison K. El formato de información de zona horaria (TZif). 2019 febrero Internet RFC 8536 doi:10.17487/RFC8536.
La traducción al español de esta página del manual fue creada por Juan Piernas <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.
| Base de Datos de Zonas Horarias |