Linux'ta saat dilimi ayarı [kapalı]


157

Zoneinfo dosyasını kopyalayarak Linux makinemde saat dilimini GMT + 6 olarak ayarlıyorum /etc/localtime, ancak datekomut hala zamanı gösteriyor UTCtime-6. Herhangi biri bana bu davranışı açıklayabilir mi?

Ben tahmin ediyorum dategöstermesi gerekir komutu UTCtime+6zamanı. İşte izleyeceğim adımlar:

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

TZ ortam değişkeni ayarlandı mı ( echo $TZboş bir satırdan başka bir şey üretiyor mu)? Ayrıca /etc/localtime, asıl dosyayı kopyalamak yerine bir sembolik bağlantı oluşturmak daha iyi bir fikir olabilir (bu şekilde, bölge verilerinin büyük olasılıkla asla değişmeyeceği şekilde değişmesi durumunda güvende olacaksınız).
Sami Laine

Dağıtım nedir? Farklı dağıtımlar bunu farklı halleder!
slm

@slm: Ben ubuntu 12.04 kullanıyorum
Rahul Dhobi

Muhtemelen bu politikayı bilmiyordunuz, ancak aynı Q’ları farklı SE sitelerinde yayınlamanız beklenmiyor. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm

2
"Bu soru birden fazla sitede yayınlandı" Huh, bu benim için yeni bir soru. Hiç böyle bir nedenden ötürü bir SE sitesine rastlamadım. Her neyse, bu, Linux’ta Linux’ta bir saat dilimini nasıl değiştireceğinizi ararken ortaya çıkan ilk soru ve bu gördüğüm herkes için en çok oy alan soru, bu yüzden belki de yeniden açılmalı mı?
Ajedi32

Yanıtlar:


272

Bu blog yazısına bir göz atın: Nasıl Yapılır: 2 Linux'ta TimeZone'u Değiştirme Yöntemleri .

Kırmızı Şapka dağıtımları

Red Hat gibi bir dağıtım kullanıyorsanız, dosyayı kopyalama yaklaşımınız çoğunlukla kabul edilebilir olacaktır.

NOT: Dikkat dağıtıcı olmayan bir çözüm arıyorsanız, bu Debian üzerinde de çalışır, ancak yalnızca Debian makineleriyle ilgilenmeniz gerekiyorsa daha basit yaklaşımlar vardır.

$ 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         

Bununla birlikte, kopyalamak yerine bağlantı kurmanızı tavsiye ederim.

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

Şimdi tarih, farklı saat dilimini gösterir:

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

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

Ubuntu / Debian Distros

Bu dağıtımlardan herhangi birinde saat dilimini değiştirmek için bu komutu kullanabilirsiniz:

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

Şimdi kontrol ettiğimizde:

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

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

NOT: Ubuntu 14.04 ve daha üst sürümlerinde tek bir komutla da bu seçenek vardır (kaynak: Ubuntu'ya sor - terminalden saat dilimini ayarlama ):

$ sudo timedatectl set-timezone Etc/GMT-6

"Etc / GMT + 6" kullanımı üzerine

@ MattJohnson'un SO konusundaki cevabından alıntı

Gibi bölgeler Etc/GMT+6POSIX standartları ile geriye dönük uyumluluk için kasıtlı olarak ters çevrilir. Bu dosyadaki yorumları görün .

Bu bölgeleri kullanmaya neredeyse hiç ihtiyaç duymamanız gerekir. Bunun yerine böyle bir tam adlandırılmış zaman dilimini kullanıyor olmalıdır America/New_Yorkya Europe/Londonya da her türlü Konumunuz için uygundur. Buradaki listeye bakın .


1

@ user3184706 - burada bir karmaşa yarattınız. Buradaki cevabınız, cevapladığım saat dilimini nasıl değiştireceğiydi. GMT'yi kullanmakla ilgili bir bit .. saat dilimi SO'nun sağladığını doğrulamakla birlikte, bunu düşündüğüm halde gerçekten sormadığınız için buraya eklemeyi ihmal ettim. Bu A'ya bu biti ekleyebilirim veya bu bilgiyi buraya kendi
slm

@ user3184706 - bu işlemi denemek ve temizlemek için Matt'in A'yı tamamlamasını sağlamak için benimkine dahil ettim.
slm

1
Bir konteynır içindeyseniz, Ubuntu ile paketi kurmanız gerektiğine dikkat edin, tzdataaksi takdirde dosyalar /usr/share/zoneinfomevcut olmaz.
Elliott Slaughter,

1
timedatectlSLES 12 için de çalışır .
Alexander Malakhov

24

Ubuntu'da böyle yapıyorum. Sadece Asia/Tokyokendi saat diliminizle değiştirin .

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

sudo dpkg-reconfigure -f noninteractive tzdata

Bir hata var tzdata: belirli değerler normalize edilir 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'

Bu da işe yarıyor, ancak Debian / Ubuntu'da slm'in cevabı muhtemelen daha kolay ve daha az riskli (yazım hatası yok)
Andreas Hartmann

17

tzselect komutu ne istediğinizi yapmak için yapılır.


1
Ve bunu, TZdeğişkeni yerel saat diliminize ayarlayan tek bir satıra sıkıştırın - örneğin, America / Los_Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Bu satırı koyabilirsiniz .profile , as tzselect`, yararlı bir şekilde önerir, sizden istemiştiniz.
kişiler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.