Встановлення часового поясу з терміналу


210

Я хочу змінити часовий пояс системного годинника з терміналу.

Це можна зробити за допомогою

tzselect

"який відкриває gui в терміналі"

або

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

"який встановить gmt"

Але чи є спосіб встановити часовий пояс із зрушенням, тобто-1 або +5 тощо?

Мені потрібно це зробити, коли я пишу заявку на коригування зсуву часу або журналів звітів, і єдина інформація, яку я маю - це IP користувача. Я можу використовувати webapp, щоб знайти місце IP, але тоді мені потрібно встановити зміщення, що було б легко, ЯКЩО я міг би просто отримати зміщення місця розташування, але якщо мені потрібно знайти зону та місто, це буде справжнім болем .

Якщо хтось знає, відповідь на те, як встановити системний годинник з +/- годиною, буде чудово.


Будь ласка, допоможіть нам підібрати прийняту відповідь. Я думаю, що відповідь @ Мітча - найкраща askubuntu.com/a/323163/22308
Nam G VU

1
@NamGVU Ні, Mitch's - не найкраще рішення, це відповідь "GUI у терміналі". Навіть ОП заявила, що "це звичайна робота, оскільки мені потрібно змінити часовий пояс з програми без введення користувачем. Мені потрібна команда, яку я можу подати в термінал не рішення gui" , і це та сама мета, яку найбільше хотілося б шукати "термінального рішення", "дружній сценарій. Collin Anderson's краще, якщо ви знаєте місто, або Ryan's для звичайного GMT + -n
Xen2050

В ubuntu 18.04, tzselect не відкриває gui. Він має вибір меню на терміналі.
Тім Річардсон

Відповіді:


321

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

sudo dpkg-reconfigure tzdata

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


14
ця робота не буде, як мені потрібно змінити часовий пояс з програми без введення користувача, мені потрібна команда, я можу подати в термінал не рішення gui дякую за відповідь
user2155009

1
Дякую!!! це допомагає, я вже змінив вручну тощо / timezone =), як php.net/manual/en/timezones.php !!! абсолютно однаковий !!!
Володимир Ч.

Переконфігурування tzdata, здається, також регулює апаратний годинник, щоб відображений час залишався однаковим після вимикача часового поясу. Ви можете захотіти, щоб ваш час був правильним, але часовий пояс був неправильним. Однак ви точно не хочете торкатися ваших апаратних годин під час подорожі. Підхід timedatectl, здається, змінює лише часовий пояс.
SnakE

@SnakE для мене відображені зміни часу відповідно
RiaD

я змінив його на шпаклівку з комадного рядка без жодних проблем, чому ти сказав це, мій друг? @ADTC
saber 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.
poolie

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

Сподіваюся, це комусь допоможе!


1
Чудово! У Ubuntu 16.04 замість цього має бути "grep zone" та "print $ 3".
user334639

Я пропоную інший кліп для отримання часового поясу. Трохи чистіше на мій погляд: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic

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-переконфігурувати 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. Але це не так легко прописати.

Якщо ви хочете встановити часовий пояс явно за допомогою скрипту (наприклад, для налаштування VM), ось такий рецепт:

Встановіть змінну для потрібного часового поясу, наприклад, одного з

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


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

5

Ось метод, який я використовую, і орієнтований на США, оскільки мені не потрібно турбуватися про часові пояси, що не входять до США.

Якщо мені потрібно визначити поточний часовий пояс, я або:

cat /etc/timezone  

або

sudo hwclock --show  

Потім я роблю:

timedatectl set-timezone <_designation_>

де <_designation_>є одне з наступних:

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

EG:

timedatectl set-timezone US/Eastern  

Інші позначення часового поясу можна знайти тут: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


tzselectце хороший спосіб отримати рядок часового поясу
Мартін Тома

0

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.