Pengaturan zona waktu dari terminal

210

Saya ingin mengubah zona waktu jam sistem dari terminal.

Ini bisa dilakukan dengan

tzselect

"Yang membuka gui di terminal"

atau

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

"yang akan diatur ke gmt"

Tetapi apakah ada cara untuk mengatur zona waktu hanya dengan offset yaitu -1 atau +5 dll?

Saya perlu melakukan ini karena saya sedang menulis aplikasi untuk menyesuaikan timeoffset atau laporan log dan satu-satunya info yang saya miliki adalah IP pengguna. Saya bisa menggunakan webapp untuk menemukan lokasi IP, tapi kemudian saya perlu mengatur offset yang akan mudah JIKA saya bisa mendapatkan offset lokasi, tetapi jika saya perlu menemukan zona dan kota itu akan sangat menyebalkan .

Jika ada yang tahu jawaban bagaimana mengatur jam sistem dengan +/- jam akan lebih bagus.

pengguna2155009
sumber
Tolong bantu kami untuk mengambil jawaban yang diterima. Saya pikir @ jawaban Mitch adalah askubuntu.com/a/323163/22308
Nam G VU
1
@NamGVU Tidak, Mitch bukan solusi terbaik, ini adalah jawaban "GUI di terminal". Bahkan OP mengatakan "ini tidak akan berfungsi karena saya perlu mengubah zona waktu dari suatu program tanpa input pengguna. Saya perlu perintah, saya dapat memberi makan ke terminal bukan solusi gui" , dan itu adalah tujuan yang sama yang paling diinginkan ketika mencari "solusi terminal," "Yang ramah skrip. Collin Anderson lebih baik jika Anda tahu kota, atau Ryan untuk GMT + -n
Xen2050
Di ubuntu 18.04, tzselect tidak membuka gui. Ini memiliki pilihan menu berbasis terminal.
Tim Richardson

Jawaban:

321

Untuk mengubah zona waktu dari terminal, cukup tekan Ctrl+ Alt+ Tdi keyboard Anda untuk membuka Terminal. Saat terbuka, jalankan perintah di bawah ini:

sudo dpkg-reconfigure tzdata

Setelah terbuka, cukup ikuti layar untuk mengubah zona waktu.

Mitch
sumber
14
ini tidak akan berfungsi karena saya perlu altr zona waktu dari suatu program tanpa input pengguna saya butuh perintah saya dapat memberi makan ke terminal bukan solusi gui terima kasih atas jawaban
user2155009
1
Terima kasih!!! ini membantu, byt saya sudah berubah secara manual dll / timezone =) seperti php.net/manual/en/timezones.php !!! sangat identik !!!
Vladimir Ch
Mengkonfigurasi ulang tzdata tampaknya juga menyesuaikan jam perangkat keras sehingga waktu yang ditampilkan tetap sama setelah zona waktu beralih. Anda mungkin menginginkannya jika waktu Anda benar tetapi zona waktu salah. Namun Anda pasti tidak ingin menyentuh jam perangkat keras saat bepergian. The Pendekatan timedatectl tampaknya mengubah zona waktu saja.
SnakE
@SnakE bagi saya menampilkan perubahan waktu yang sesuai
RiaD
saya mengubahnya dari dempul dari garis komad tanpa masalah mengapa Anda mengatakan itu teman saya? @ADTC
saber tabatabaee yazdi
170

Anda juga dapat menggunakan yang baru timedatectluntuk mengatur waktu di 14.04.

sudo timedatectl set-timezone America/New_York
Collin Anderson
sumber
Bagaimana Anda menginstalnya di ubuntu?
Division by Zero
1
Ini diinstal secara default pada 14,04.
Collin Anderson
6
Untuk melihat semua opsi yang tersedia, Anda dapat menjalankan ls -R --group-directories-first /usr/share/zoneinfo. (Berhati-hatilah untuk tidak mengubah atau menghapus file apa pun di sini.) Info lebih lanjut tentang posixdan rightawalan ada di sini .
ADTC
Ini bekerja! ...
Dan Nissenbaum
3
Gunakan sudo timedatectl set-timezone Etc/UTCuntuk UTC.
Zoltán
19

Anda dapat menggunakan file GMT ± x dalam /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime
Ry-
sumber
terima kasih membagikan untuk balasan saya mendapatkan kesalahan ln: gagal membuat tautan simbolik `/ etc / localtime ': File ada oboiusly im tidak yakin apa yang saya lakukan lakukan Anda tahu tutorial yang baik untuk ini atau bahkan beberapa kata kunci saya dapat google terima kasih saya menggunakan perintah dengan benar? saya menggunakan sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime untuk menyetel jam ke + 1gmt
user2155009
9
minitech lupa bendera kekuatan saya kira begitu -> sudo ln -sf ....
Tele
1
Ini sepertinya bekerja, tetapi tidak akan memperbarui nama tz di /etc/timezone.
poolie
1
Untuk memperbarui / etc / timezone, jalankansudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme
17

Saya menyadari utas ini agak ketinggalan jaman, tetapi saya mencari solusi yang lebih baik karena saya perlu secara otomatis mengatur zona waktu dalam VM setelah pengguna mengunduhnya dari situs web kami dan menyebarkannya. Inilah yang akhirnya saya dapatkan:

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"

Ini akan meminta geoip.ubuntu.com dari server setelah dimulai pada jaringan baru (skrip saya memeriksa konektivitas terlebih dahulu) dan kemudian mengatur zona waktu server berdasarkan respons.

"Wget -q0 -" memberitahu wget untuk menampilkan hanya hasil ke stdout yang kemudian disalurkan ke variabel $ tz.

Semoga ini bisa membantu seseorang!

Clayton Dukes
sumber
1
Bagus! Di Ubuntu 16.04 seharusnya "grep zone" dan "print $ 3" ​​sebagai gantinya.
user334639
Saya mengusulkan cli yang berbeda untuk mendapatkan zona waktu. Lebih bersih dalam pandangan saya: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic
11

TL; DR /etc/localtime adalah tautan simbolis yang menunjuk ke suatu file di /usr/share/zoneinfo/Continent/City. Dengan mengubah di mana ia menunjuk Anda dapat mengubah zona waktu Anda.

Untuk mengubah zona waktu, hapus /etc/localtimedan berikan tautan simbolis ke kota yang Anda inginkan. Misalnya, ls -l /etc/localtimemelaporkan bahwa file ini menunjuk ke /usr/share/zoneinfo/America/Denver. Untuk mengubahnya ke New York, saya lakukan

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Tunggu sebentar sampai jam saya diperbarui

Tangkapan layar di bawah ini memperlihatkan langkah-langkah dan konfirmasi dari timedatectl

masukkan deskripsi gambar di sini

Sergiy Kolodyazhnyy
sumber
itu bagus untuk memahami apa yang terjadi di balik tirai, tetapi tidakkah Anda pikir akan lebih baik untuk menyarankan alat yang ditunjuk untuk ini seperti dpkg-mengkonfigurasi ulang tzdata dll?
Patrick Cornelissen
@ PatrickCornelissen Pertama-tama, sudah ada jawaban tzdata, jadi menyarankan hal yang sama tidak ada gunanya. Kedua, tzdataapakah hampir sama. Terserah kepada pengguna untuk memutuskan apa yang mereka sukai, jadi itu tidak lebih baik atau lebih buruk - hanya preferensi seseorang.
Sergiy Kolodyazhnyy
1
Nah, bekerja "melawan" alat distribusi sering menimbulkan masalah, jadi saya akan menghindari pendekatan Anda jika memungkinkan, tetapi solusi Anda cukup adil (saat ini)
Patrick Cornelissen
Solusi ini seperti yang saya mengerti, bekerja di berbagai distribusi. Tetapi masih membutuhkan database zona waktu yang tersedia di direktori / usr / share / zoneinfo. Apakah ada cara untuk mendapatkan basis data zona waktu tanpa menginstal paket tzdata?
andho
@ andho Karena /var/lib/dpkg/info/tzdata.listmenyarankan bahwa semua item /usr/share/zoneinfodatang dengan paket itu, saya akan menganggap Anda perlu menginstal paket untuk memiliki semua item, tetapi terus terang saya tidak yakin, ditambah tidak cukup akrab dengan cara ini bekerja pada yang lain distribusi. Pertimbangkan mengajukan ini sebagai pertanyaan di Unix & Linux , dan jangan ragu untuk merujuk posting ini jika Anda ingin memberikan konteks untuk pertanyaan itu.
Sergiy Kolodyazhnyy
10

Cara mudah untuk memperbarui zona waktu adalah menggunakan sudo dpkg-reconfigure tzdata. Tapi ini tidak mudah ditulis.

Jika Anda ingin mengatur zona waktu secara eksplisit melalui skrip (misalnya untuk menyiapkan VM), berikut resepnya:

Tetapkan variabel untuk zona waktu yang Anda inginkan, misalnya satu

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

Nilai yang valid adalah direktori dan nama file di bawah /usr/share/zoneinfo.

Maka sederhananya

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

Perhatikan bahwa keduanya /etc/localtimedan /etc/timezoneharus konsisten.

Mungkin sekarang reboot untuk mendapatkan semua layanan Anda diperbarui juga (misalnya cron).

Rick-777
sumber
-1: Jangan pernah gunakan cpuntuk mengatur / etc / localtime. / etc / localtime adalah symlink ke file yang benar. Jika Anda menggunakannya cpuntuk mengubahnya, Anda benar-benar akan menghancurkan isi dari file tzdata apa pun yang sedang ditunjuk, jadi tiba-tiba (misalnya) file tzdata UTC berisi data zona waktu untuk Eropa / London dan bukan untuk UTC, yang buruk (dan menjengkelkan) untuk memecahkan masalah, seperti yang bisa saya katakan dari pengalaman pribadi)
Foogod
5

Inilah metode yang saya gunakan, yang US-centric karena saya tidak perlu khawatir tentang zona waktu non-AS.

Jika saya perlu menentukan zona waktu saat ini, saya juga melakukan:

cat /etc/timezone  

atau

sudo hwclock --show  

Saya kemudian melakukan:

timedatectl set-timezone <_designation_>

dimana <_designation_>salah satu dari berikut ini:

AS / AS Timur /
AS Tengah
/ Gunung
AS / Pasifik
AS / Alaska
AS / Aleutian
AS / Arizona
AS / Indiana Timur-
AS / Hawaii
AS / Indiana-Starke
AS / Michigan
AS / Pasifik-Baru
AS / Samoa

MISALNYA:

timedatectl set-timezone US/Eastern  

Penunjukan zona waktu lain dapat ditemukan di sini: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Red blur
sumber
tzselectadalah cara yang baik untuk mendapatkan zona waktu
Martin Thoma
0

Anda tidak dapat melakukan ini kecuali jika Anda memilih file zona waktu yang ingin Anda sesuaikan dengan setiap zona waktu offset.

Beberapa jawaban menyarankan menggunakan file di / usr / share / zoneinfo / Etc, tetapi masalah dengan ini adalah bahwa mereka DST agnostik.

Jadi, kecuali Anda memilih konfigurasi zona waktu yang cocok dengan setiap offset, atau Anda tidak peduli dengan DST, tidak ada cara untuk melakukannya secara umum.

Alex G
sumber