Provided by: manpages-es_4.27.0-1_all bug

NOMBRE

       archivos tz - información de zona horaria

DESCRIPCIÓN

       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:

         •  La  secuencia  mágica  ASCII  de  cuatro  bytes  “TZif”  identifica  el  archivo  como un archivo de
            información de zona horaria.

         •  Un byte que identifica la versión del formato del archivo (a partir de 2021, ya sea ASCII NUL,  “2”,
            “3”, o “4”).

         •  Quince bytes de ceros, reservando el espacio para algún uso futuro.

         •  Seis valores enteros de cuatro bytes, en el siguiente orden:

            tzh_ttisutcnt
              Número de indicadores UT/locales almacenados en el archivo. (UT es hora universal).

            tzh_ttisstdcnt
              Cantidad de indicadores estándar/pared almacenados en el archivo.

            tzh_leapcnt
              Cantidad de segundos durante los cuales se almacenan las entradas de datos en el archivo.

            tzh_timecnt
              Cantidad de tiempos de transición para los que se almacenan las entradas de datos en el archivo.

            tzh_typecnt
              Cantidad de tipos de hora local para los que se almacenan entradas de datos en el archivo (no debe
              ser cero).

            tzh_charcnt
              Cantidad de bytes de de abreviaturas de zona horaria almacenadas en el archivo.

       El  encabezado  anterior  va seguido de los siguientes campos, cuyas longitudes dependen del contenido de
       dicho encabezado:

         •  tzh_timecnt valores enteros con signo de cuatro bytes ordenados en orden ascendente.  Estos  valores
            se  escriben en el orden de bytes de la red. Cada uno se utiliza como tiempo de transición (tal como
            retorna time(2)) en el que cambian las reglas para calcular la hora local.

         •  tzh_timecnt valores enteros sin signo de un byte. Cada uno de ellos, excepto el último, indica  cuál
            de los diferentes tipos de hora local descritos en el archivo está asociado con el período de tiempo
            que  comienza  con  el  mismo  tiempo de transición indexado y continúa hasta el siguiente tiempo de
            transición, pero sin incluirlo. El último  tipo  de  hora  está  presente  solo  para  verificar  la
            coherencia  con  la  cadena  TZ de estilo POSIX.1-2017 que se describe a continuación. Estos valores
            servirán como índices en el siguiente campo.

         •  tzh_typecnt ttinfo entradas, cada una de ellas definida de la siguiente manera:

              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].

         •  tzh_charcnt  bytes que representan designaciones de zona horaria. Son cadenas de bytes terminadas en
            null, cada una de ellas indexada por los valores tt_desigidx mencionados anteriormente. Las  cadenas
            de  bytes  pueden  superponerse  si una es un sufijo de la otra. No se especifica la codificación de
            estas cadenas.

         •  tzh_leapcnt pares de valores de cuatro bytes, escritos en el orden de bytes de  la  red;  el  primer
            valor  de  cada  par  proporciona el tiempo no negativo (según lo devuelto por time(2)) en el que se
            produce un segundo intercalar o en el que caduca la tabla de segundos intercalares; el segundo valor
            es un entero con signo que define la corrección, que es el número total de segundos intercalares que
            se aplicarán durante el período de tiempo que comienza en el momento dado. Los pares de  valores  se
            ordenan  en orden estrictamente ascendente en base al tiempo. Cada par denota un segundo intercalar,
            ya sea positivo o negativo, excepto que si el último par tiene la misma corrección que el  anterior,
            el  último  par  denota  el tiempo de vencimiento de la tabla de segundos intercalares. Cada segundo
            intercalar se produce al final de un mes de calendario UTC. El primer segundo  intercalar  tiene  un
            tiempo  de  aparición  no negativo y es un segundo intercalar positivo si y sólo si su corrección es
            positiva; la corrección para cada  segundo  intercalar  después  del  primero  difiere  del  segundo
            intercalar  anterior  en  1  para  un  segundo  intercalar  positivo o -1 para un segundo intercalar
            negativo. Si la tabla de segundos intercalares está vacía, la corrección del segundo  intercalar  es
            cero  para  todas  las  marcas de tiempo; de lo contrario, para las marcas de tiempo anteriores a la
            hora de la primera aparición, la corrección del segundo intercalar es  cero  si  la  corrección  del
            primer  par  es  1 o -1, y en caso contrario no se especifica (lo que solo puede ocurrir en archivos
            truncados al inicio).

         •  tzh_ttisstdcnt indicadores estándar/pared, cada uno almacenado como un byte booleano; ellos dicen si
            los tiempos de transición asociados con los tipos de tiempo local fueron especificados  como  tiempo
            estándar o local (hora del reloj de pared).

         •  tzh_ttisutcnt  Indicadores  UT/locales.  Cada uno almacenado como un byte booleano, indicarán si los
            tiempos de transición asociados con los tipos de tiempo locales  se  definieron  como  UT  o  tiempo
            local.  Si se establece un indicador UT/local, también debe establecerse el indicador estándar/pared
            correspondiente.

       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='EET2EEST' 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='EET2EEST,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.

NOTAS

       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).

   Formato de la versión 2
       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.

   Formato de versión 3
       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.

   Formato de versión 4
       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.

   Consideraciones de interoperabilidad
       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.

   Cuestiones comunes de interoperabilidad
       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:

         •  ayudar  a  los  creadores de archivos TZif a crear archivos que eviten los errores más habituales en
            lectores TZIF más antiguos o con mal implementados,

         •  para ayudar a las aplicaciones que lean archivos TZif a evitar los errores más comunes al  leer  los
            archivos generados por futuras aplicaciones y

         •  para ayudar a los futuros autores de definiciones a ver los problemas que surgen cuando se cambia el
            formato TZif.

       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:

         •  Algunas aplicaciones  examinan  sólo  los  datos  de  la  versión  1.  Como  solución  parcial,  las
            aplicaciones que crean archivos TZif pueden sacar tantos datos de la versión 1 como sea posible. Sin
            embargo,  al leerse deberán ignorarse los datos de la versión 1, y debe usar los datos en la versión
            2+, incluso si los timestamps nativos del lector solo tienen 32 bits.

         •  Algunos lectores diseñados para la versión 2 pueden manipular  mal  los  timestamps  después  de  la
            última  transición  de  un  archivo  de  la  versión  3  o  superior,  porque no pueden analizar las
            extensiones de POSIX.1-2017 en la cadena similar a TZ. Como solución parcial, pueden producirse  más
            transiciones  de  las  necesarias,  de  modo  que  sólo  los  lectores  de  la  versión  2 manipulen
            incorrectamente las marcas de tiempo del futuro.

         •  Algunos lectores diseñados para la versión 2 no permiten tener el horario de verano con transiciones
            después de las 24:00 – por ejemplo, una cadena TZ) “EST5EDT,0/0,J365/25”  Indicando  el  horario  de
            verano  del este permanente (-04). Como solución, puede sustituirse el tiempo estándar por dos zonas
            horarias al este, por ejemplo, “XXX3EDT4,0/0,J365/23” para una zona horaria con un  tiempo  estándar
            nunca  utilizado  (XXX,  -03)  y  horario  de  verano  negativo  (EDT,  -04),  durante  todo el año.
            Alternativamente, como una solución parcial puede sustituirse el tiempo  estándar  para  la  próxima
            zona horario al este – e.g., “AST4” para el Tiempo Estándar Atlántico permanente (-04).

         •  Algunas aplicaciones diseñadas para la versión 2 o 3 requieren una estricta conformidad con RFC 8536
            y  por  tanto  rechazan  los  archivos  de  la versión 4 cuyas tablas de segundos intercalares están
            truncadas al comienzo o que terminan en tiempos de caducidad.

         •  Algunos lectores ignoran el final del bloque de datos, y en su lugar predicen las marcas  de  tiempo
            futuras  a  partir  del  tipo  de  tiempo  de  la  última transición.  Como solución parcial, pueden
            producirse más transiciones de las necesarias.

         •  Algunos lectores no usan el tipo de tiempo  0  para  las  marcas  de  tiempo  antes  de  la  primera
            transición, sino que que deducen un tipo de tiempo de forma heurística y no siempre se selecciona el
            tiempo tipo 0. Como solución parcial, puede simularse una primera transición en los inicios.

         •  Algunas aplicaciones que leer estos archivos, gestionan mal las marcas de tiempo antes de la primera
            transición  que  tiene  una  marca  de tiempo no inferior a -2**31.  Las que soportan sólo marcas de
            tiempo de 32 bits probablemente sean más  propensas  a  este  problema,  por  ejemplo,  al  procesar
            transiciones  de  64  bits porque sólo algunas son representables en 32 bits. Como solución parcial,
            puede emitir una transición en la marca -2**31 aunque no es lo ideal.

         •  Algunas aplicaciones gestionan mal una transición si su  marca  de  tiempo  tiene  el  valor  mínimo
            posible de 64 bits con signo. No se recomiendan marcas de tiempo inferiores a -2**59.

         •  Algunas  aplicaciones manejan incorrectamente las cadenas TZ que contienen “<” o “>”.  Como solución
            parcial, puede evitarse el uso “<” o “>” para  abreviaturas  de  zona  horaria  que  contienen  sólo
            caracteres alfabéticos.

         •  Muchas  aplicaciones  gestionan  incorrectamente  las  abreviaturas  de zonas horarias que contienen
            caracteres que no ASCII por lo que no se recomienda su uso.

         •  Algunas aplicaciones pueden gestionar mal las abreviaturas de zona horaria que contienen menos de  3
            o  más  de  6  caracteres,  o  que  contienen caracteres ASCII no alfanuméricos.  “-”, y “+”.  No se
            recomienda el uso de estas abreviaturas.

         •  Algunas aplicaciones manejan mal los archivos TZif que especifican compensaciones UT del horario  de
            verano  inferiores  a  las  compensaciones  UT  para  la  hora  estándar correspondiente. No admiten
            ubicaciones como Irlanda, que utiliza el equivalente de la cadena TZ.  “IST-1GMT0,M10.5.0,M3.5.0/1”,
            observando el horario estándar (IST, +01) en verano y el horario de verano (GMT, +00)  en  invierno.
            Como  solución  parcial,  un  escritor  puede  generar  datos  para  el  equivalente de la cadena TZ
            “GMT0IST,M3.5.0/1,M10.5.0”, intercambiando así entre el horario estándar y  el  horario  de  verano.
            Aunque  esta  solución identifica erróneamente la parte del año que utiliza el horario de verano, si
            registra correctamente las compensaciones UT y las abreviaturas de zona horaria.

         •  Algunos lectores generan marcas de tiempo ambiguas para segundos intercalares positivos que  ocurren
            cuando  el  desplazamiento  UTC  no es múltiplo de 60 segundos. Por ejemplo, en una zona horaria con
            diferencia UTC +01:23:45 y con un segundo intercalar positivo 78796801  (1972-06-30  23:59:60  UTC),
            algunos  lectores  asignarán tanto 78796800 como 78796801 a las 01:23:45 hora local al día siguiente
            en lugar de asignar este último a las 01:23:46, y asignarán 78796815 a las 01:23:59 en  lugar  de  a
            las  01:23:60.  Esto  todavía  no  ha  sido  un problema práctico, ya que ninguna autoridad civil ha
            observado tales compensaciones UTC desde que se introdujeron los segundos intercalares en 1972.

       A continuación, se enumeran algunos problemas de interoperabilidad principalmente como advertencias  para
       los desarrolladores de aplicaciones que lean estos archivos.

         •  Algunas  aplicaciones no admiten marcas de tiempo negativas. Los desarrolladores deberían tener esto
            en cuenta si necesitan trabajar con datos anteriores a 1970.

         •  Algunos lectores manejan mal las marcas de tiempo antes de la primera transición que tiene una marca
            de tiempo no negativa. Es probable que los lectores que no admitan marcas de tiempo  negativas  sean
            más propensos a sufrir este problema.

         •  Algunas  aplicacines  gestionan  incorrectamente  las  abreviaturas  de  zona horaria como “-08” que
            contienen “+”, “-”, o dígitos.

         •  Algunos lectores manejan mal las compensaciones UT que están fuera del intervalo tradicional de  -12
            a +12 horas. Por ejemplo, no admiten ubicaciones como Kiritimati al estar fuera de este intervalo.

         •  Algunas  aplicaciones  gestionan  incorrectamente  las compensaciones UT en el intervalo [-3599, -1]
            segundos desde UT, porque dividen la compensación en números enteros entre 3600  para  obtener  0  y
            luego muestran la parte horaria como “+00”.

         •  Algunas  aplicaciones  gestionan  incorrectamente  las compensaciones UT que no son múltiplos de una
            hora, de 15 minutos o de 1 minuto.

VÉASE TAMBIÉN

       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.

TRADUCCIÓN

       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                                                                   archivos tz(5)