Ejemplo de obtención del parámetro tz

El parámetro tz almacena una zona horaria y sus ajustes del horario de verano (DST) en un único entero de 32 bits con signo. En las propiedades del usuario, este valor se llama tz. En la solicitud render/set_locale, se llama tzOffset.

Estructura de tz

El valor tz consta de las siguientes partes:

Bits Máscara Contenido
0–15 0x0000FFFF Desfase respecto a UTC en segundos
16–27 0x0FFF0000 Ajustes del horario de verano. Para conocer los valores posibles, consulte Horario de verano.
28–31 0xF0000000 Signo del desfase respecto a UTC. Si el desfase es negativo, los cuatro bits están activados.

El signo del desfase respecto a UTC se toma del bit 31, no del bit 15. Por ejemplo, el desfase +10:00 (36000, o 0x8CA0) tiene activado el bit 15, pero es positivo.

Si tz & 0x0C000000 no es igual a 0x08000000, el valor está en el formato antiguo. En este formato, el desfase respecto a UTC en segundos es tz & 0xFFFFFFFE, y el bit 0 define el horario de verano: si el bit 0 está activado, no se usa el horario de verano; si no lo está, el horario de verano sigue los ajustes del servidor.

Realice todas las operaciones que se indican a continuación con enteros de 32 bits con signo. En los lenguajes que usan enteros de 64 bits, como Python o PHP, convierta los resultados a valores de 32 bits con signo. De lo contrario, -3600 & 0xF000FFFF devuelve 4026593776 en lugar de -268373520.

Codificar tz

A continuación se muestra un ejemplo para el desfase respecto a UTC -01:00 (-3600) sin horario de verano (0x08000000). Para conocer los desfases de todas las zonas horarias, consulte Zonas horarias.

  1. Aplique un AND bit a bit al desfase respecto a UTC con la máscara 0xF000FFFF. La máscara conserva el desfase en los bits 0–15 y el signo en los bits 28–31. Si usa la máscara 0xFFFF en su lugar, el signo se pierde y el servidor interpreta -01:00 como +17:12.

    Copied!
    -3600 & 0xF000FFFF
    -268373520
    
  2. Aplique un OR bit a bit al resultado con el valor del horario de verano. Sin horario de verano, el valor es 0x08000000.

    Copied!
    -268373520 | 0x08000000
    -134155792
    

El valor tz resultante es -134155792 (0xF800F1F0).

Decodificar tz

Para obtener el desfase respecto a UTC y los ajustes del horario de verano a partir de tz = -134155792, siga estos pasos:

  1. Aplique un AND bit a bit a tz con la máscara 0xFFFF:

    Copied!
    -134155792 & 0xFFFF
    61936
    
  2. Si tz es negativo (el bit 31 está activado), aplique un OR bit a bit al resultado con la máscara 0xFFFF0000 para restaurar el signo:

    Copied!
    61936 | 0xFFFF0000
    -3600
    

    El desfase respecto a UTC es de -3600 segundos, es decir, -01:00.

  3. Para obtener los ajustes del horario de verano, aplique un AND bit a bit a tz con la máscara 0x0FFF0000:

    Copied!
    -134155792 & 0x0FFF0000
    0x08000000
    

    El valor 0x08000000 significa que no hay horario de verano.

Si nota un error en el texto, por favor resáltelo y presione Ctrl+Intro.