¿Cómo verificar qué zona horaria en Linux?

129

¿Hay alguna manera de verificar en qué zona horaria estoy actualmente en Linux?

Peter Mortensen
fuente

Respuestas:

19

Por lo general, la TZvariable de entorno le dirá algo útil. Sin embargo, es mejor utilizar funciones como mktime()y localtime()para convertir entre time_ty una representación de zona horaria local. Es decir, no intentes hacer la conversión tú mismo .

Greg Hewgill
fuente
2
¿Hay algún comando que diga sobre la zona horaria en la que se encuentra el usuario?
26
Claro, datete lo diré.
Greg Hewgill
Tengo dos instancias de servidor, si doy el comando "fecha" en ambos servidores, muestra una hora diferente. la zona horaria para ambos servidores es IST, hora de un servidor: lunes 11 de julio 10:39:31 IST 2011 y otro servidor lunes 11 de julio 10:35:31 IST 2011 .. hay una diferencia de 4 minutos
8
En Precise Pangolin echo $TZno me devuelve nada.
Iain Samuel McLean Élder
3
@GregHewgill su respuesta no es útil a primera vista. Considere editar su respuesta por favor. Vea la respuesta más votada a continuación. Voy a rechazar tu respuesta por ahora. Además, no hay TZ env por defecto en mis máquinas.
therealmarv
244

Si quiere decir desde la consola, simplemente escriba:

date +%Z
Rasman
fuente
2
bien, funciona bien
Silver Moon
15
esta debería ser la respuesta aceptada
KalenGi
buen punto ... cambió la respuesta a ese efecto
Rasman
Y para configurar la zona horaria desde la línea de comandos en Ubuntu, el siguiente enlace proporciona el comando trivial de 1 línea para hacerlo: askubuntu.com/a/524362/182454
Dan Nissenbaum
Esto +07me da . Para obtener Region/Cityun Linux basado en Debian / Arch, vea esta respuesta .
Tom Hale
54

Si desea la zona horaria numérica:

date +'%:z %Z'

Salida de muestra:

-05:00 EST
Paul Vargas
fuente
77
En OS X esto sale:z EST
sospechoso
77
Esto si para linux .
Paul Vargas
1
Más precisamente, esto se aplica a GNU date. La versión de BusyBox imprime algo no sensible, "%: z CEST" en mi caso.
Léo Lam
Sin embargo, date +% z funciona bien en OS X. Le sugiero que modifique la respuesta.
Neil Mayhew
1
Hola, @NeilMayhew ¡Gracias! Humm ... pero la pregunta tiene las etiquetaslinux ubuntu-10.04
Paul Vargas
24

En cambio, quería encontrar la zona horaria en forma "EE. UU. / Este" o "Europa / Londres". Puedes encontrar esto en:

  • / etc / timezone (presente en Ubuntu y Red Hat? pero no, por ejemplo, Amazon Linux)
  • (en sistemas de estilo Red Hat) como ZONE="US/Eastern"en / etc / sysconfig / clock
  • o 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.

Rup
fuente
44
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
Freiheit
6

A veces puede estar buscando la zona horaria canónica en lugar de la forma abreviada producida por date %Zej US/Eastern. En sistemas con, timedatectlpor ejemplo, Fedora, timedatectlgenera 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, timedatectltoma set-timezonecomo 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
Raman
fuente
4
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Entonces estoy en Mountain Time. Aunque los consejos anteriores sobre el uso de la variable de entorno o simplemente la salida del comando de fecha a veces funcionan mejor, dependiendo de cómo quiera usar eso.

Tagar
fuente
2
  • / etc / sysconfig / clock establece si el reloj de hardware se almacena como hora UTC o local.
  • Enlace simbólico / etc / localtime a / usr / share / zoneinfo / ... para configurar su zona horaria.
  • Escriba /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.

Rup
fuente
1

Un par de soluciones:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

me dio (respectivamente):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

Mi computadora está en UTC.

tika
fuente
0

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

TekOps
fuente
0

A veces timedatectl set-timezoneno se actualiza/etc/timezone , por lo que es mejor obtener el tiemzone del nombre del archivo al que /etc/timezoneapunta 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 .

Tom Hale
fuente
0

Puede mostrar la fecha y la zona horaria simultáneamente:

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
Mohsen Abasi
fuente