Establecer zona horaria desde la terminal

210

Quiero cambiar la zona horaria del reloj del sistema desde la terminal.

Esto se puede hacer con

tzselect

"que abre una interfaz gráfica de usuario en la terminal"

o

sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime

"que se establecerá en gmt"

Pero, ¿hay alguna manera de establecer la zona horaria con solo el desplazamiento, es decir, -1 o +5, etc.?

Necesito hacer esto ya que estoy escribiendo una aplicación para ajustar el tiempo de espera o reportar registros y la única información que tengo es la IP del usuario. Puedo usar una aplicación web para encontrar la ubicación de la IP, pero luego necesito establecer un desplazamiento que sería fácil SI pudiera obtener el desplazamiento de la ubicación, pero si necesito encontrar la zona y la ciudad, sería un verdadero dolor .

Si alguien sabe la respuesta a cómo configurar el reloj del sistema con +/- hora, sería genial.

usuario2155009
fuente
Ayúdenos a recoger la respuesta aceptada. Creo que la respuesta de @ Mitch es la mejor askubuntu.com/a/323163/22308
Nam G VU
1
@NamGVU No, Mitch's no es la mejor solución, es una respuesta "GUI en una terminal". Incluso el OP dijo "esto no funcionará, ya que necesito alterar la zona horaria de un programa sin la entrada del usuario, necesito un comando que pueda alimentar a la solución de terminal no gui" , y ese es el mismo objetivo que la mayoría desearía al buscar una "solución de terminal, "un guión amigable. Collin Anderson es mejor si conoces una ciudad, o la de Ryan por GMT + -n
Xen2050
En ubuntu 18.04, tzselect no abre una interfaz gráfica de usuario. Tiene una selección de menú basada en terminal.
Tim Richardson

Respuestas:

321

Para cambiar la zona horaria desde la terminal, simplemente presione Ctrl+ Alt+ Ten su teclado para abrir la Terminal. Cuando se abra, ejecute los siguientes comandos:

sudo dpkg-reconfigure tzdata

Una vez abierto, solo siga las pantallas para cambiar la zona horaria.

Mitch
fuente
14
esto no funcionará mientras que necesito altr zona horaria de un programa sin intervención del usuario necesito una orden i puede alimentar en el terminal no solución gui gracias por la respuesta
user2155009
1
¡¡¡gracias!!! ¡Esto ayuda, por cierto, ya he cambiado manualmente, etc / timezone =) como php.net/manual/en/timezones.php !!! absolutamente idéntico !!!
Vladimir Ch
La reconfiguración de tzdata también parece ajustar el reloj del hardware para que la hora mostrada permanezca igual después del cambio de zona horaria. Es posible que desee eso si su hora era correcta pero la zona horaria estaba equivocada. Sin embargo, definitivamente no desea tocar su reloj de hardware mientras viaja. El enfoque timedatectl parece cambiar solo la zona horaria.
SnakE
@SnakE para mí muestra los cambios de hora en consecuencia
RiaD
Lo cambié de masilla de línea de comando sin ningún problema ¿por qué dijiste eso mi amigo? @ADTC
saber tabatabaee yazdi
170

También puede usar el nuevo timedatectlpara configurar la hora en 14.04.

sudo timedatectl set-timezone America/New_York
Collin Anderson
fuente
¿Cómo lo instalas en ubuntu?
División por Zero
1
Se instala por defecto en 14.04.
Collin Anderson
66
Para ver todas las opciones disponibles, puede ejecutar ls -R --group-directories-first /usr/share/zoneinfo. (Tenga cuidado de no modificar o borrar ningún archivo aquí.) Más información sobre posixy rightprefijos está aquí .
ADTC
¡Esto funciona! ...
Dan Nissenbaum
3
Uso sudo timedatectl set-timezone Etc/UTCpara UTC.
Zoltán
19

Puede usar los archivos GMT ± x en /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime
Ry-
fuente
muchas gracias por responder estoy obteniendo un error ln: no se pudo crear el enlace simbólico `/ etc / localtime ': el archivo existe obviomente, no estoy seguro de lo que estoy haciendo, sabes de un buen tutorial para esto o incluso algunas palabras clave que puedo google gracias estoy usando el comando correctamente? estoy usando sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime para configurar el reloj en + 1gmt
user2155009
99
minitech olvidó la bandera de fuerza, supongo que sí -> sudo ln -sf ....
Tele
1
Esto funcionará un poco, pero no actualizará el nombre tz /etc/timezone.
poolie
1
Para actualizar la zona horaria / etc /, ejecutesudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme
17

Me doy cuenta de que este hilo está un poco anticuado, pero estaba buscando una solución mejor porque necesitaba configurar automáticamente la zona horaria en una VM después de que un usuario la descarga de nuestro sitio web y la implementa. Esto es lo que terminé con:

echo "Setting TimeZone..."
export tz=`wget -qO - http://geoip.ubuntu.com/lookup | sed -n -e 's/.*<TimeZone>\(.*\)<\/TimeZone>.*/\1/p'` &&  timedatectl set-timezone $tz
export tz=`timedatectl status| grep Timezone | awk '{print $2}'`
echo "TimeZone set to $tz"

Esto consultará geoip.ubuntu.com desde el servidor una vez que se inicie en la nueva red (mi script comprueba la conectividad primero) y luego establecerá la zona horaria del servidor en función de la respuesta.

El "wget ​​-q0 -" le dice a wget que solo envíe los resultados a stdout, que luego se canaliza a la variable $ tz.

Espero que ayude a alguien!

Clayton Dukes
fuente
1
¡Excelente! En Ubuntu 16.04 debería ser "grep zone" e "print $ 3" ​​en su lugar.
user334639
Propongo un cli diferente para obtener la zona horaria. Un poco más limpio en mi opinión: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic el
11

TL; DR /etc/localtime es un enlace simbólico que apunta a un archivo /usr/share/zoneinfo/Continent/City. Al alterar dónde apunta, puede alterar su zona horaria.

Para cambiar la zona horaria, elimine /etc/localtimey asigne el enlace simbólico a la ciudad que desee. Por ejemplo, ls -l /etc/localtimeinforma que este archivo apunta a /usr/share/zoneinfo/America/Denver. Para cambiarlo a Nueva York, lo hago

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Espera un minuto para que mi reloj se actualice

La siguiente captura de pantalla muestra los pasos y la confirmación de timedatectl

ingrese la descripción de la imagen aquí

Sergiy Kolodyazhnyy
fuente
es bueno entender lo que está sucediendo detrás de la cortina, pero ¿no crees que sería mejor sugerir las herramientas designadas para esto como dpkg-reconfigure tzdata, etc.?
Patrick Cornelissen
@PatrickCornelissen En primer lugar, ya hay respuestas tzdata, por lo que sugerir lo mismo no tiene sentido. En segundo lugar, tzdatahace más o menos lo mismo. Depende del usuario decidir qué prefiere, por lo que no es ni mejor ni peor, solo la preferencia de una persona.
Sergiy Kolodyazhnyy
1
Bueno, trabajar "en contra" de las herramientas de distribución a menudo conduce a problemas, por lo que evitaría su enfoque si es posible, pero lo suficientemente justo como su solución funcionaría (actualmente)
Patrick Cornelissen
Esta solución, según tengo entendido, funciona en diferentes distribuciones. Pero aún necesita la base de datos de zona horaria disponible en el directorio / usr / share / zoneinfo. ¿Hay alguna manera de obtener la base de datos de zonas horarias sin instalar el paquete tzdata?
andho
@andho Since /var/lib/dpkg/info/tzdata.listsugiere que todos los elementos /usr/share/zoneinfovienen con ese paquete, supongo que es necesario instalar el paquete para tener todos los elementos, pero, francamente, no estoy muy seguro, y tampoco estoy muy familiarizado con cómo funciona esto en otros distribuciones Considere hacer esto como una pregunta en Unix y Linux , y siéntase libre de hacer referencia a esta publicación si desea proporcionar un contexto para la pregunta.
Sergiy Kolodyazhnyy
10

La manera fácil de actualizar la zona horaria es usarla sudo dpkg-reconfigure tzdata. Pero esto no es tan fácil de escribir.

Si desea establecer la zona horaria explícitamente a través de un script (por ejemplo, para configurar una VM), aquí hay una receta:

Establezca una variable para la zona horaria que desee, por ejemplo, una de

tz=Europe/London
tz=America/Anchorage
tz=Etc/GMT+6

Los valores válidos son los directorios y nombres de archivo bajo /usr/share/zoneinfo.

Entonces simplemente

sudo cp -vf /usr/share/zoneinfo/$tz /etc/localtime
echo $tz | sudo tee /etc/timezone

Tenga en cuenta que ambos /etc/localtimey /etc/timezonedeben ser consistentes.

Probablemente ahora reinicie para actualizar todos sus servicios también (por ejemplo, cron).

Rick-777
fuente
-1: No lo use nunca cppara configurar / etc / localtime. / etc / localtime es un enlace simbólico al archivo correcto. Si cpsolía cambiarlo, en realidad golpeará el contenido de cualquier archivo tzdata al que esté apuntando actualmente, así que de repente (por ejemplo) el archivo tzdata UTC contiene datos de zona horaria para Europa / Londres en lugar de UTC, lo cual es malo (y molesto solucionar, como puedo decir por experiencia personal)
Foogod
5

Este es el método que uso, que se centra en los EE. UU. Ya que no necesito preocuparme por las zonas horarias que no son de EE. UU.

Si necesito determinar la zona horaria actual, lo hago:

cat /etc/timezone  

o

sudo hwclock --show  

Entonces hago:

timedatectl set-timezone <_designation_>

donde <_designation_>es uno de los siguientes:

EE. UU. / Este de
EE. UU. / EE. UU. Central
/ Montaña de
EE. UU. / Pacífico
EE. UU. / Alaska
EE. UU. / Aleutiana
EE. UU. / Arizona
EE. UU. / Este-Indiana
EE. UU. / Hawái
EE. UU. / Indiana-Starke
EE. UU. / Míchigan
EE. UU. / Pacífico-Nuevo
EE. UU. / Samoa

P.EJ:

timedatectl set-timezone US/Eastern  

Se pueden encontrar otras designaciones de zonas horarias aquí: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Redblur
fuente
tzselectes una buena manera de obtener la cadena de zona horaria
Martin Thoma
0

No puede hacer esto a menos que seleccione el archivo de zona horaria que desea corresponder a cada desplazamiento de zona horaria.

Algunas respuestas sugirieron usar los archivos en / usr / share / zoneinfo / Etc, pero el problema con estos es que son independientes de DST.

Entonces, a menos que elija alguna configuración de zona horaria para que coincida con cada desplazamiento, o no le importe el horario de verano, no hay forma de hacerlo genéricamente.

Alex G
fuente