¿Hay alguna manera de verificar en qué zona horaria estoy actualmente en Linux?
¿Hay alguna manera de verificar en qué zona horaria estoy actualmente en Linux?
Respuestas:
Por lo general, la TZ
variable de entorno le dirá algo útil. Sin embargo, es mejor utilizar funciones como mktime()
y localtime()
para convertir entre time_t
y una representación de zona horaria local. Es decir, no intentes hacer la conversión tú mismo .
date
te lo diré.
echo $TZ
no me devuelve nada.
Si quiere decir desde la consola, simplemente escriba:
date +%Z
Si desea la zona horaria numérica:
date +'%:z %Z'
Salida de muestra:
-05:00 EST
:z EST
date
. La versión de BusyBox imprime algo no sensible, "%: z CEST" en mi caso.
linux
ubuntu-10.04
En cambio, quería encontrar la zona horaria en forma "EE. UU. / Este" o "Europa / Londres". Puedes encontrar esto en:
ZONE="US/Eastern"
en / etc / sysconfig / clocko puede intentar hacer coincidir / etc / localtime con uno de los archivos en / usr / share / zoneinfo; molestamente esto no parece ser un enlace simbólico, pero puedes
cd / usr / share / zoneinfo
find * -tipo f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}" \;
para encontrar archivos coincidentes, probablemente haya mejores formas de hacerlo, pero eso funciona. Habrá múltiples partidos.
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
Para ubuntu intente esto:
$ cat /etc/timezone
Salida de muestra:
Asia/Kolkata
Para otra distribución de referencia: https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
timedatectl set-timezone
no se actualiza/etc/timezone
. Vea esta respuesta para una solución basada en /etc/localtime
.
A veces puede estar buscando la zona horaria canónica en lugar de la forma abreviada producida por date %Z
ej US/Eastern
. En sistemas con, timedatectl
por ejemplo, Fedora, timedatectl
genera mucha información útil, incluida 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
Lamentablemente, timedatectl
toma set-timezone
como un comando, pero no tiene correspondiente get-timezone
. Analízalo de la siguiente manera:
# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern
Para la zona horaria, puede usar la geolocalización:
$ curl https://ipapi.co/timezone
America/Chicago
O:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
/sbin/hwclock --systohc [--utc]
para configurar el reloj de hardware.El kernel de Linux siempre almacena y calcula el tiempo como el número de segundos desde la medianoche del 1 de enero de 1970 UTC, independientemente de si su reloj de hardware está almacenado como UTC o no. Las conversiones a su hora local se realizan en tiempo de ejecución. Una cosa interesante de esto es que si alguien está usando su computadora desde una zona horaria diferente, puede configurar la variable de entorno TZ y todas las fechas y horas aparecerán correctas para su zona horaria.
Si la cantidad de segundos transcurridos desde el 1 de enero de 1970 UTC se almacena como un entero de 32 bits con signo (como en su sistema Linux / Intel), su reloj dejará de funcionar en algún momento en el año 2038. Linux no tiene ningún problema inherente de Y2K , pero tiene un problema para el año 2038. Con suerte, todos estaremos ejecutando Linux en sistemas de 64 bits para entonces. Los enteros de 64 bits mantendrán nuestros relojes funcionando bastante bien hasta aproximadamente el año 292271 millones.
El uso de TZ o date NO ES CONFIABLE porque le indica la zona horaria del USUARIO, no la zona horaria predeterminada del sistema.
La zona horaria predeterminada del sistema se almacena en / etc / timezone (que a menudo es un enlace simbólico al archivo de datos de la zona horaria específica de la zona horaria). Si no tiene un / etc / timezone, mire / 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 correcta a menudo también le dará información de geografía.
Los linux más nuevos tienen "timedatectl" que le brinda toneladas de información cuando se ejecuta el comando.
(como nodo lateral, si tiene un sistema antiguo que todavía utiliza las zonas horarias codificadas ANTIGUAS, probablemente pueda copiar un archivo de zona horaria moderna y funcionará. He tenido que hacer esto muchas veces para resolver las zonas horarias cambiantes en equipos viejos).
A veces timedatectl set-timezone
no se actualiza/etc/timezone
, por lo que es mejor obtener el tiemzone del nombre del archivo al que /etc/timezone
apunta el enlace simbólico :
#!/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 .
Puede mostrar la fecha y la zona horaria simultáneamente:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'