Вопрос: Установка временной зоны из терминала


Я хочу изменить часовой пояс системных часов с терминала.

Это можно сделать с помощью

tzselect

«который открывает gui в терминале»

или

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

"который будет установлен в gmt"

Но есть ли способ установить часовую зону с только смещением ie-1 или +5 и т. Д.?

Мне нужно сделать это, поскольку я пишу приложение для настройки timeoffset или журналов отчетов, и единственная информация, которую я имею, - это IP-адрес пользователя. Я могу использовать webapp для поиска местоположения IP, но тогда мне нужно установить смещение, которое было бы легко, если бы я мог просто получить смещение местоположения, но если мне нужно найти зону и город, это будет настоящая боль ,

Если кто-нибудь знает, как установить системные часы с +/- часом, это будет здорово.


174
2017-07-22 20:22


Источник


Пожалуйста, помогите нам подобрать принятый ответ. Я думаю, что ответ Митча - лучший askubuntu.com/a/323163/22308 - Nam G VU
@NamGVU Нет, Митч - не лучшее решение, это ответ «GUI в терминале». Даже ОП сказал «это не работает, так как мне нужно изменить часовой пояс из программы без ввода пользователем. Мне нужна команда, которую я могу использовать в терминальном решении не gui», и это одна и та же цель, которой больше всего хотелось бы при поиске «терминального решения», дружественного к сценарию. Коллин Андерсон лучше, если вы знаете город или Райан для обычного GMT + -n - Xen2050


Ответы:


Чтобы изменить часовой пояс от терминала, просто нажмите Ctrl+Alt+T на клавиатуре, чтобы открыть терминал. Когда он откроется, запустите следующие команды:

sudo dpkg-reconfigure tzdata

После открытия просто следуйте экранам, чтобы изменить часовой пояс.


270
2017-07-22 22:02



Это самый простой, безболезненный метод. - Thomas Ward♦
это не будет работать, поскольку мне нужно изменить часовой пояс из программы без ввода пользователем. Мне нужна команда, которую я могу подавать в терминал, а не решение gui. Спасибо за ответ. - user2155009
@ user2155009 очень простое без GUI чисто терминальное решение в Ответ Collin Anderson, Я не понимаю, почему кто-то дал бы GUI-ответ на вопрос терминала. Если бы мы хотели использовать графический интерфейс, мы бы все равно использовали графический интерфейс, а не запускали терминал из графического интерфейса, а затем запускали графический интерфейс из терминала ... - ADTC
спасибо!!! это помогает, если я уже изменил вручную и т.д. / часовой пояс =) нравится php.net/manual/en/timezones.php !!! абсолютно одинаково !!! - Vladimir Ch
@ADTC Точно мои мысли, вниз по этой причине. - Elijah Lynn


Вы также можете использовать новый timedatectl установить время в 14.04.

sudo timedatectl set-timezone America/New_York

140
2017-09-15 15:43



Как установить его на ubuntu? - Division by Zero
По умолчанию он установлен на 14.04. - Collin Anderson
Чтобы просмотреть все доступные опции, вы можете запустить ls -R --group-directories-first /usr/share/zoneinfo, (Будьте внимательны, чтобы не изменять или не удалять файлы здесь.) Больше информации о posix а также right префиксы Вот, - ADTC
Это работает! ... - Dan Nissenbaum
использование sudo timedatectl set-timezone Etc/UTC для UTC. - Zoltán


Вы можете использовать GMT ±Икс файлов в /usr/share/zoneinfo/Etc,

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime

17
2017-07-22 20:43



спасибо allot для ответа im получить ошибку ln: не удалось создать символическую ссылку `/ etc / localtime ': файл существует oboiusly im не уверен, что они делают, вы знаете, хороший учебник для этого или даже некоторые ключевые слова, я могу google спасибо am i используя команду правильно? im, используя sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime для установки часов до + 1gmt - user2155009
minitech забыл флаг силы, я так думаю -> sudo ln -sf .... - Tele
Это будет работать, но не будет обновлять имя tz в /etc/timezone, - poolie


Я понимаю, что этот поток немного устарел, но я искал лучшее решение, потому что мне нужно было автоматически установить часовой пояс в виртуальной машине после того, как пользователь загрузит его с нашего сайта и развозит его. Вот что я закончил:

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"

Это будет запрашивать geoip.ubuntu.com с сервера после его запуска в новой сети (мой скрипт проверяет первый курс подключения), а затем устанавливает часовой пояс сервера на основе ответа.

«Wget -q0 -» сообщает wget выводить только результаты в stdout, которые затем передаются в переменную $ tz.

Надеюсь, это поможет кому-то!


16
2017-12-25 03:22



Большой! На Ubuntu 16.04 вместо этого должна быть «grep zone» и «print $ 3». - user334639
Я предлагаю другой кли для получения часового пояса. На мой взгляд, немного чище: curl -s 'geoip.ubuntu.com/lookup»; | xmllint --xpath '/ Response / TimeZone / text ()' - - Darko Miletic


TL; DR  /etc/localtime является символической ссылкой, которая указывает на файл в /usr/share/zoneinfo/Continent/City, Изменяя, где он указывает, вы можете изменить свой часовой пояс.

Чтобы изменить часовой пояс, удалите /etc/localtime и назначьте символическую ссылку на нужный город. Например, ls -l /etc/localtime сообщает, что этот файл указывает на /usr/share/zoneinfo/America/Denver, Чтобы изменить его на Нью-Йорк, я

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Подождите, пока мои часы не будут обновлены

На следующем скриншоте показаны шаги и подтверждение timedatectl

enter image description here


10
2018-05-06 02:21



приятно понимать, что происходит за занавеской, но разве вы не думаете, что было бы лучше предложить назначенные инструменты для этого, например, dpkg-reconfigure tzdata и т. д.? - Patrick Cornelissen
@PatrickCornelissen Прежде всего, есть ответы на tzdata уже, так что предлагать то же самое бессмысленно. Во-вторых, tzdata делает в значительной степени то же самое. Это зависит от пользователя, чтобы решить, что они предпочитают, поэтому это ни лучше, ни хуже - просто предпочтение человека. - Sergiy Kolodyazhnyy
Ну, работа «против» инструментов распространения часто приводит к проблемам, поэтому я бы избегал вашего подхода, если это было возможно, но достаточно справедливо, что ваше решение будет работать (в настоящее время) - Patrick Cornelissen
Это решение, как я понимаю, работает в разных дистрибутивах. Но по-прежнему требуется база данных часового пояса, доступная в каталоге / usr / share / zoneinfo. Есть ли способ получить базу данных часовых поясов без установки пакета tzdata? - andho
@andho Поскольку /var/lib/dpkg/info/tzdata.list предполагает, что все предметы в /usr/share/zoneinfo придет с этим пакетом, я бы предположил, что вам нужно установить пакет, чтобы иметь все предметы, но, честно говоря, я не совсем уверен, а также не совсем понял, как это работает в других дистрибутивах. Подумайте об этом как о вопросе о Unix & Linux, и не стесняйтесь ссылаться на этот пост, если вы хотите предоставить контекст для вопроса. - Sergiy Kolodyazhnyy


Простым способом обновления часового пояса является использование sudo dpkg-reconfigure tzdata, Но это не так легко написано сценарием.

Если вы хотите явно задать часовой пояс через сценарий (например, для настройки виртуальной машины), вот рецепт:

Установите переменную для требуемого часового пояса, например. один из

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

Допустимыми значениями являются каталоги и имена файлов под /usr/share/zoneinfo,

Тогда просто

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

Обратите внимание, что оба /etc/localtime а также /etc/timezone должны быть последовательными.

Вероятно, теперь перезагрузитесь, чтобы обновить все ваши сервисы (например, cron).


10
2018-05-13 18:13



-1: Никогда не используйте cp установить / etc / localtime. / etc / localtime - это символическая в правильный файл. Если вы используете cp чтобы изменить его, вы на самом деле собираете содержимое любого файла tzdata, на который он указывает сейчас, так что внезапно (например) файл tzdata UTC содержит данные о часовом поясе для Европы / Лондона, а не для UTC, что плохо (и раздражает устранение неполадок, как я могу сказать из личного опыта) - Foogod


Вот метод, который я использую, который является ориентированным на США, поскольку мне не нужно беспокоиться о неамериканских часовых поясах.

Если мне нужно определить текущий часовой пояс, я либо делаю:

cat /etc/timezone  

или

sudo hwclock --show  

Затем я делаю:

timedatectl set-timezone <_designation_>

где <_designation_> является одним из следующих:

US / Eastern
США / Central
США / Mountain
США / Pacific
США / Аляска
США / Алеутской
США / Аризона
США / Восточная Индиана
США / Hawaii
США / Индиан Старка
США / Мичиган
США / Pacific-New
США / Самоа

НАПРИМЕР.:

timedatectl set-timezone US/Eastern  

Другие обозначения часовых поясов можно найти здесь: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


3
2018-03-29 19:04





Вы не можете сделать это, если не выбрать файл часового пояса, который вы хотите соответствовать каждому смещению часового пояса.

Некоторые ответы предлагались с использованием файлов в / usr / share / zoneinfo / Etc, но проблема заключается в том, что они являются агностиками DST.

Поэтому, если вы не выбрали какую-либо конфигурацию часового пояса, чтобы соответствовать каждому смещению, или вам не нравится DST, нет никакого способа сделать это в общем.


0
2017-08-23 17:52