Pengaturan zona waktu di Linux [ditutup]

157

Saya menetapkan zona waktu ke GMT + 6 pada mesin Linux saya dengan menyalin file zoneinfo ke /etc/localtime, tetapi dateperintah masih menunjukkan waktu sebagai UTCtime-6. Adakah yang bisa menjelaskan perilaku ini kepada saya?

Saya mengasumsikan dateperintah harus menampilkan UTCtime+6waktu. Berikut langkah-langkah yang saya ikuti:

date
Wed Jan 22 17:29:01 IST 2014

date -u
Wed Jan 22 11:59:01 UTC 2014

cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

date
Wed Jan 22 05:59:21 GMT+6 2014

date -u
Wed Jan 22 11:59:01 UTC 2014
Rahul Dhobi
sumber
Apakah variabel lingkungan TZ telah disetel (apakah echo $TZmenghasilkan sesuatu selain garis kosong)? Juga mungkin ide yang lebih baik untuk membuat symlink /etc/localtimedaripada menyalin file yang sebenarnya (dengan cara itu Anda akan aman, jika data zoneinfo pernah berubah yang kemungkinan besar tidak akan pernah terjadi).
Sami Laine
Apa distronya? Distro yang berbeda menangani ini secara berbeda!
slm
@slm: Saya menggunakan ubuntu 12.04
Rahul Dhobi
Anda mungkin tidak mengetahui kebijakan ini, tetapi Anda tidak seharusnya melakukan lintas posting Q yang sama di situs SE yang berbeda. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm
2
"Pertanyaan ini telah diposting di beberapa situs" Hah, itu yang baru bagiku. Tidak pernah menjumpai situs SE dengan alasan dekat seperti itu. Bagaimanapun, ini adalah pertanyaan pertama yang muncul di Google ketika mencari cara mengubah zona waktu di Linux, dan itu adalah pertanyaan yang paling banyak dipilih dari semua yang saya lihat, jadi mungkin itu harus dibuka kembali?
Ajedi32

Jawaban:

273

Lihatlah posting blog ini berjudul: Cara: 2 Metode Untuk Mengubah TimeZone di Linux .

Distro Red Hat

Jika Anda menggunakan distribusi seperti Red Hat maka pendekatan Anda untuk menyalin file sebagian besar dapat diterima.

CATATAN: Jika Anda mencari solusi distro-agnostik, ini juga berfungsi pada Debian, meskipun ada pendekatan yang lebih sederhana di bawah ini jika Anda hanya perlu khawatir dengan mesin Debian.

$ ls /usr/share/zoneinfo/
Africa/      CET          Etc/         Hongkong     Kwajalein    Pacific/     ROK          zone.tab
America/     Chile/       Europe/      HST          Libya        Poland       Singapore    Zulu
Antarctica/  CST6CDT      GB           Iceland      MET          Portugal     Turkey       
Arctic/      Cuba         GB-Eire      Indian/      Mexico/      posix/       UCT          
Asia/        EET          GMT          Iran         MST          posixrules   Universal    
Atlantic/    Egypt        GMT0         iso3166.tab  MST7MDT      PRC          US/          
Australia/   Eire         GMT-0        Israel       Navajo       PST8PDT      UTC          
Brazil/      EST          GMT+0        Jamaica      NZ           right/       WET          
Canada/      EST5EDT      Greenwich    Japan        NZ-CHAT      ROC          W-SU         

Saya akan merekomendasikan menautkannya daripada menyalin.

$ sudo unlink /etc/localtime 
$ sudo ln -s /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

Tanggal sekarang menunjukkan zona waktu berbeda:

$ date -u
Thu Jan 23 05:40:31 UTC 2014

$ date 
Wed Jan 22 23:40:38 GMT+6 2014

Ubuntu / Debian Distro

Untuk mengubah zona waktu pada salah satu distro ini, Anda dapat menggunakan perintah ini:

$ sudo dpkg-reconfigure tzdata

    ss # 1

$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Etc/GMT-6'
Local time is now:      Thu Jan 23 11:52:16 GMT-6 2014.
Universal Time is now:  Thu Jan 23 05:52:16 UTC 2014.

Sekarang ketika kita memeriksanya:

$ date -u
Thu Jan 23 05:53:32 UTC 2014

$ date 
Thu Jan 23 11:53:33 GMT-6 2014

CATATAN: Ada juga opsi ini di Ubuntu 14.04 dan lebih tinggi dengan satu perintah (sumber: Tanyakan Ubuntu - mengatur zona waktu dari terminal ):

$ sudo timedatectl set-timezone Etc/GMT-6

Tentang penggunaan "Etc / GMT + 6"

kutipan dari jawaban @ MattJohnson pada SO

Zona seperti Etc/GMT+6ini sengaja dibalik untuk kompatibilitas dengan standar POSIX. Lihat komentar di file ini .

Anda seharusnya hampir tidak perlu menggunakan zona ini. Alih-alih, Anda harus menggunakan zona waktu sepenuhnya bernama seperti America/New_Yorkatau Europe/Londonatau apa pun yang sesuai untuk lokasi Anda. Lihat daftar di sini .

slm
sumber
1
lihat jawaban dari pertanyaan ini di sini stackoverflow.com/questions/21282367/timezone-setting-in-linux
Rahul Dhobi
@ user3184706 - Anda agak membuat kekacauan di sini. T Anda di sini adalah cara mengubah zona waktu, yang saya jawab. Sedikit tentang menggunakan GMT .. zona waktu atau tidak bahwa SO A disediakan akurat, tapi saya lalai memasukkannya di sini, karena Anda tidak benar-benar bertanya tentang itu, meskipun saya pikir. Saya dapat menambahkan bit itu ke A ini atau Anda dapat menyalin / menempelkan info itu di sini sebagai A. Anda sendiri.
slm
@ user3184706 - untuk mencoba dan membersihkan ini, saya menyertakan Matt's A di tambang untuk membuatnya lengkap.
slm
1
Perhatikan bahwa jika Anda berada dalam sebuah wadah, dengan Ubuntu Anda harus menginstal paket tzdataatau file-file di dalamnya /usr/share/zoneinfotidak akan ada.
Elliott Slaughter
1
timedatectlbekerja untuk SLES 12 juga.
Alexander Malakhov
24

Ini adalah bagaimana saya melakukannya di Ubuntu. Ganti saja Asia/Tokyodengan zona waktu Anda sendiri.

echo 'Asia/Tokyo' | sudo tee /etc/timezone

sudo dpkg-reconfigure -f noninteractive tzdata

Ada bug di tzdata: nilai-nilai tertentu dinormalisasi dengan dpkg-reconfigure:

echo 'US/Central' >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Current default time zone: 'America/Chicago'

echo 'US/Eastern' >/etc/timezone
apt-get install --reinstall tzdata
# Current default time zone: 'America/New_York'
pengguna241
sumber
Ini juga berfungsi, tetapi di Debian / Ubuntu, jawaban slm mungkin lebih mudah dan lebih tidak berisiko (tidak ada kemungkinan salah ketik)
Andreas Hartmann
17

Perintah tzselect dibuat untuk melakukan apa yang Anda inginkan.

SHW
sumber
1
Dan untuk menyingkatnya menjadi satu baris yang mengatur TZvariabel ke zona waktu lokal Anda - misalnya, untuk Amerika / Los_Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Anda dapat menempatkan baris ini di. Profil Anda , as tzselect` sangat membantu, apakah Anda menjalankannya di prompt.
Sama