Установка часового пояса с терминала

210

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

Это может быть сделано с

tzselect

"который открывает графический интерфейс в терминале"

или же

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

"который установит gmt"

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

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

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

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

Ответы:

321

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

sudo dpkg-reconfigure tzdata

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

Митч
источник
14
это не сработает, так как мне нужно изменить часовой пояс из программы без ввода пользователя. Мне нужна команда, которую я могу
передать
1
Спасибо!!! это помогает, но я уже изменился вручную и т. д. / timezone =) вроде php.net/manual/en/timezones.php !!! абсолютно идентичный !!!
Владимир Ч
Переконфигурирование tzdata, похоже, также настраивает аппаратные часы, так что отображаемое время остается неизменным после переключения часового пояса. Вы могли бы хотеть этого, если ваше время было правильным, но часовой пояс был неправильным. Однако вы определенно не хотите трогать ваши аппаратные часы во время путешествия. Timedatectl подход , кажется, изменяется только часовой пояс.
SnakE
@SnakE для меня отображает изменения времени соответственно
RiaD
я поменял его с замазки с запятой без проблем, почему ты сказал, что мой друг? @ADTC
сабля tabatabaee yazdi
170

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

sudo timedatectl set-timezone America/New_York
Коллин Андерсон
источник
Как вы устанавливаете его на Ubuntu?
Деление на ноль
1
Он установлен по умолчанию 14.04.
Коллин Андерсон
6
Чтобы увидеть все доступные варианты, вы можете запустить ls -R --group-directories-first /usr/share/zoneinfo. (Будьте осторожны, не изменяйте и не стирайте здесь какие-либо файлы.) Более подробная информация posixи rightпрефиксы здесь .
ADTC
Это работает! ...
Дан Ниссенбаум
3
Используйте sudo timedatectl set-timezone Etc/UTCдля UTC.
Золтан
19

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

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime
Рыбаковым
источник
спасибо за ответ, я получаю сообщение об ошибке ln: не удалось создать символическую ссылку `/ etc / localtime ': файл существует oboiusly, я не уверен, что я делаю, знаете ли вы хороший урок для этого или даже некоторые ключевые слова, которые я могу найти в Google, спасибо, я правильно использовать команду? Я использую sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime, чтобы установить часы на + 1gmt
user2155009
9
Minitech забыл флаг силы, я так думаю -> sudo ln -sf ....
Tele
1
Это будет работать, но не обновит имя tz в /etc/timezone.
пул
1
Чтобы обновить / etc / timezone, запуститеsudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme
17

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

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 выводить только результаты в стандартный вывод, который затем передается в переменную $ tz.

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

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

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

введите описание изображения здесь

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

Самый простой способ обновить часовой пояс - это использовать 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).

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

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

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

cat /etc/timezone  

или же

sudo hwclock --show  

Я тогда делаю:

timedatectl set-timezone <_designation_>

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

США / Восточные
США / Центральные
США / Горные
США / Тихий океан
США / Аляска
США / Алеутские
США / Аризона
США / Восточная-Индиана
США / Гавайи
США / Индиана-Старке
США / Мичиган
США / Тихоокеанский регион-Новые
США / Самоа

НАПРИМЕР:

timedatectl set-timezone US/Eastern  

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

Redblur
источник
tzselectэто хороший способ получить строку часового пояса
Мартин Тома
0

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

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

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

Алекс Г
источник