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.
-
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áscara0xFFFFen su lugar, el signo se pierde y el servidor interpreta -01:00 como +17:12.-3600 & 0xF000FFFF -268373520 -
Aplique un OR bit a bit al resultado con el valor del horario de verano. Sin horario de verano, el valor es
0x08000000.-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:
-
Aplique un AND bit a bit a
tzcon la máscara0xFFFF:-134155792 & 0xFFFF 61936 -
Si
tzes negativo (el bit 31 está activado), aplique un OR bit a bit al resultado con la máscara0xFFFF0000para restaurar el signo:61936 | 0xFFFF0000 -3600El desfase respecto a UTC es de
-3600segundos, es decir, -01:00. -
Para obtener los ajustes del horario de verano, aplique un AND bit a bit a
tzcon la máscara0x0FFF0000:-134155792 & 0x0FFF0000 0x08000000El valor
0x08000000significa que no hay horario de verano.