¿Cómo comprobar en qué zona horaria en Linux?
¿Hay alguna manera de comprobar en qué zona horaria estoy actualmente en Linux?
¿Hay alguna manera de comprobar en qué zona horaria estoy actualmente en Linux?
Si quieres la zona horaria numérica:
date +'%:z %Z'
Salida de la muestra:
-05:00 EST
Quería encontrar la zona horaria en forma de “US/Estado” o “Europa/Londres” en su lugar. Puedes encontrar esto en:
ZONE="US/Eastern"
en /etc/sysconfig/clock Por lo general, la variable de entorno TZ
te dirá algo útil. Sin embargo, es mejor usar funciones como mktime()
y localtime()
para convertir entre time_t
y una representación de la zona horaria local. Es decir, no intentes hacer la conversión tú mismo.
Para ubuntu pruebe esto :
$ cat /etc/timezone
Salida de la muestra :
Asia/Kolkata
Para otra distribución Referencia : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
A veces se puede buscar la zona horaria canónica en lugar de la forma corta como la producida por date %Z
, por ejemplo US/Eastern
. En los sistemas con timedatectl
, por ejemplo Fedora, timedatectl
produce mucha información útil, incluyendo la zona actual:
# timedatectl
Local time: Tue 2016-09-13 17:10:26 EDT
Universal time: Tue 2016-09-13 21:10:26 UTC
RTC time: Tue 2016-09-13 21:10:26
Time zone: US/Eastern (EDT, -0400)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
Desafortunadamente, timedatectl
toma set-timezone
como un comando, pero no tiene un get-timezone
correspondiente. Analícelo de la siguiente manera:
# timedatectl status | grep "zone" | sed -e 's/^[]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
Para la zona horaria, puedes usar la geolocalización:
$ curl https://ipapi.co/timezone
America/Chicago
O:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
Puedes mostrar la fecha y la zona horaria simultáneamente:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
A veces timedatectl set-timezone
no actualiza /etc/timezone
, por lo que es mejor obtener el tiemzone del nombre del archivo al que apunta el enlace simbólico /etc/timezone
:
#!/bin/bash
set -euo pipefail
if filename=$(readlink /etc/localtime); then
# /etc/localtime is a symlink as expected
timezone=${filename#*zoneinfo/}
if [[$timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
# not pointing to expected location or not Region/City
>&2 echo "$filename points to an unexpected location"
exit 1
fi
echo "$timezone"
else # compare files by contents
# https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi
Referencias: en esta respuesta .
Usar TZ o la fecha NO ES FIABLE porque te dice la zona horaria del USUARIO, no la zona horaria por defecto del sistema.
La zona horaria por defecto del sistema se almacena en /etc/timezone (que suele ser un enlace simbólico al archivo de datos de zona horaria específico de la zona horaria). Si no tiene una zona horaria /etc/timezone, mire en /etc/localtime. Generalmente esa es la zona horaria del “servidor”. /etc/localtime es a menudo un enlace simbólico a un archivo de zona horaria en /usr/share/zoneinfo. Esa ruta al archivo de zona horaria correcto a menudo también le dará información geográfica.
Los linux más nuevos tienen “timedatectl” que le da mucha información cuando se ejecuta el comando.
(como un nodo lateral, si tiene un sistema antiguo que todavía usa las viejas zonas horarias codificadas, probablemente puede copiar un archivo de zona horaria moderna en él y funcionará. He tenido que hacer esto muchas veces para resolver el cambio de zonas horarias en equipos antiguos).