Terminalden saat dilimini ayarlama


210

Sistem saatinin saat dilimini terminalden değiştirmek istiyorum.

Bu yapılabilir

tzselect

"terminalde bir gui açar"

veya

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

"gmt olarak ayarlanacak"

Fakat saat dilimini sadece ofset-1 veya +5 vb. İle ayarlamanın bir yolu var mı?

Zaman aşımı ayarını veya rapor günlüklerini ayarlamak için bir uygulama yazarken bunu yapmam gerekiyor ve sahip olduğum tek bilgi kullanıcı IP'si. IP'nin yerini bulmak için bir webapp kullanabilirim, ancak daha sonra sadece konumu dengeleyebilirsem kolay olan bir ofset belirlemem gerekiyor, ancak bölge ve şehri bulmam gerekirse gerçek bir acı olurdu .

Birisi sistem saatinin +/- saatle nasıl ayarlanacağının cevabını bilen biri olursa, çok iyi olurdu.


Lütfen kabul edilen cevabı bulmamıza yardım edin. Sanırım @ Mitch'in cevabı en iyi askubuntu.com/a/323163/22308
Nam G VU

1
@NamGVU Hayır, Mitch en iyi çözüm değil, bir "terminalde GUI" cevabı. OP bile, "Bu, kullanıcı girişi olmayan bir programdan saat dilimini çalıştırmaya ihtiyacım olduğu için işe yaramayacağıma göre çalışmayacağım," gui çözümü değil terminaline besleyebileceğim bir komuta ihtiyacım var "dedi. "senaryo dostu bir tane. Eğer bir şehir biliyorsanız Collin Anderson daha iyidir, ya da Ryan GMT + -n için
Xen2050

Ubuntu 18.04'te, tzselect bir GUI açmaz. Terminal tabanlı bir menü seçimine sahiptir.
Tim Richardson

Yanıtlar:


321

Saat dilimini terminalden değiştirmek için, Terminal'i açmak için klavyenizdeki Ctrl+ Alt+ tuşlarına basın T. Açıldığında, aşağıdaki komutları çalıştırın:

sudo dpkg-reconfigure tzdata

Açıldıktan sonra, saat dilimini değiştirmek için sadece ekranları izleyin.


14
Bu kullanıcı çalışmayan bir programdan saat dilimi altr ihtiyaç duyduğum gibi işe yaramaz bir komuta ihtiyacım var ben terminali gui çözümü
besleyebilir

1
Teşekkür!!! Bu yardımcı olur, byt zaten manuel olarak değiştirildim etc / timezone =) php.net/manual/en/timezones.php !!! kesinlikle aynı !!!
Vladimir Ch,

Tzdata'nın yeniden yapılandırılması donanım saatini de ayarlamış gibi görünmektedir, böylece görüntülenen saat, saat dilimi anahtarından sonra aynı kalır. Zamanınız doğru ancak saat dilimi hatalıysa bunu isteyebilirsiniz. Ancak, seyahat ederken kesinlikle donanım saatinize dokunmak istemezsiniz. Timedatectl yaklaşım sadece zaman dilimini değiştirmek gibi görünüyor.
SnakE

@SnakE benim için buna göre zaman değişiklikleri gösterdi
RiaD

Ben neden ondan demiştim ki, commad çizgisinden hiç sorun çıkmadan arkadaşım demiştin? @ADTC
sabre tabatabaee

170

timedatectlSaati 14.04'te ayarlamak için yenisini de kullanabilirsiniz .

sudo timedatectl set-timezone America/New_York

Ubuntu'ya nasıl yüklersiniz?
Bölüm

1
Varsayılan olarak 14.04'te kuruludur.
Collin Anderson

6
Mevcut tüm seçenekleri görmek için koşabilirsiniz ls -R --group-directories-first /usr/share/zoneinfo. (Buradaki herhangi bir dosyayı değiştirmemeye veya silmemeye dikkat edin.) Daha fazla bilgi posixve rightönekler burada .
ADTC

Bu çalışıyor! ...
Dan Nissenbaum

3
sudo timedatectl set-timezone Etc/UTCUTC için kullanın .
Zoltán

19

GMT ± x dosyalarını içinde kullanabilirsiniz /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime

cevap için teşekkür ederim im bir hata alıyorum ln: '/ etc / localtime' sembolik linkini oluşturamadı: Dosya var oboiusly im 'i var. Yaptığımdan emin değilim, bunun için iyi bir öğretici olduğunu biliyorsunuz ya da hatta bazı anahtar kelimeler bile google. komutu doğru mu kullanıyorsunuz? sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime kullanarak saati + 1gmt olarak ayarlamak im
user2155009

9
minitech kuvvet bayrağını unuttum sanırım -> sudo ln -sf ....
Tele

1
Bu işe yarayacak, fakat tz adını güncellemeyecek /etc/timezone.
poolie

1
/ Etc / timezone 'i güncellemek için, çalıştırınsudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme

17

Bu iş parçacığının biraz eski olduğunun farkındayım, ancak daha iyi bir çözüm arıyordum çünkü bir kullanıcı web sitemizden indirdikten ve konuşlandırdıktan sonra otomatik olarak saat dilimini VM'de ayarlamam gerekiyordu. İşte benim neyle sonuçlandığım:

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"

Bu, geoip.ubuntu.com'u yeni ağda başlattıktan sonra (betiğim önce bağlantıyı kontrol eder) betiği sorgulayacak ve ardından sunucunun saat dilimini cevabına göre ayarlayacaktır.

"Wget -q0 -", wget'a yalnızca sonuçları stdout'a vermesini ve ardından $ tz değişkenine aktarılmasını söyler.

Birisi yardımcı olur umarım!


1
Harika! Ubuntu 16.04'te "grep zone" olmalı ve bunun yerine "$ 3" yazmalıdır.
kullanıcı334639

Saat dilimini almak için farklı bir yol önereceğim. Benim görüşüme göre biraz temizleyici: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic

11

TL; DR /etc/localtime , içindeki bir dosyayı işaret eden sembolik bir bağdır /usr/share/zoneinfo/Continent/City. Nerede olduğunu göstererek saat diliminizi değiştirebilirsiniz.

Saat dilimini değiştirmek /etc/localtimeiçin, istediğiniz şehre ve sembolik bağlantısını kaldırın . Örneğin, ls -l /etc/localtimebu dosyanın işaret ettiğini bildirir /usr/share/zoneinfo/America/Denver. New York'a değiştirmek için, yaparım.

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Saatimin güncellenmesi için bir dakika bekleyin

Ekran görüntüsü aşağıda belirtilen adımları ve onayları gösterir. timedatectl

görüntü tanımını buraya girin


Perdenin arkasında ne olduğunu anlamak güzel, ama bunun için belirlenmiş araçları dpkg-reconfigure tzdata vs. gibi önermek daha iyi olmaz mı?
Patrick Cornelissen

@PatrickCornelissen Her şeyden önce, tzdatazaten cevapları var , bu yüzden aynı şeyi düşünmek anlamsızdır. İkincisi, tzdatahemen hemen aynı yapar. Neyi tercih edeceklerine karar vermek kullanıcıya kalmış, bu yüzden ne daha iyi ne de daha kötüsü - sadece bir kişinin tercihi.
Sergiy Kolodyazhnyy

1
Eh, dağıtım araçlarına "karşı" çalışmak genellikle sorunlara yol açar, bu yüzden eğer mümkünse yaklaşımınızdan kaçınırdım, ancak çözümünüz işe yarayacak kadar adil (şu anda)
Patrick Cornelissen

Anladığım kadarıyla bu çözüm, farklı dağıtımlarda çalışıyor. Ancak yine de / usr / share / zoneinfo dizininde bulunan zaman dilimi veritabanına ihtiyaç duyuyor. Tzdata paketini kurmadan saat dilimi veri tabanını elde etmenin bir yolu var mı?
andho

@ andho Bu paketteki /var/lib/dpkg/info/tzdata.listtüm öğelerin birlikte /usr/share/zoneinfogeldiğini öne sürdüğü için, tüm öğelere sahip olmak için paketi yüklemeniz gerektiğini varsayarım, ama açıkçası emin değilim, bunun diğerlerinde nasıl çalıştığını tam olarak bilmiyorum. dağılımları. Bunu Unix ve Linux'ta bir soru olarak sormayı düşünün ve eğer soru için içerik sağlamak istiyorsanız bu yazıya atıfta bulunmaktan çekinmeyin.
Sergiy Kolodyazhnyy

10

Saat dilimini güncellemenin kolay yolu kullanmaktır sudo dpkg-reconfigure tzdata. Ama bu o kadar kolay komut dosyası değil.

Saat dilimini açıkça bir komut dosyası aracılığıyla ayarlamak istiyorsanız (örneğin, bir VM oluşturmak için), işte bir tarif:

İstediğiniz saat dilimine, örneğin

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

Geçerli değerler, altındaki dizinler ve dosya adlarıdır /usr/share/zoneinfo.

O zaman basitçe

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

Her iki unutmayın /etc/localtimeve /etc/timezonetutarlı olmalıdır.

Muhtemelen şimdi tüm hizmetlerinizi de güncellemek için yeniden başlatınız (örn. Cron).


-1: Asla cp/ etc / localtime ayarlamak için kullanmayın . / etc / localtime, doğru dosyaya bir işarettir . Eğer kullanıyorsanız cpbunu değiştirmek için, aslında şu anda UTC tzdata dosyası kötü yerine UTC için Avrupa / Londra, saat dilimi verilerini içeren (örneğin) kadar aniden, işaret ediyor dosyası tzdata olursa olsun içeriğini clobber (ve can sıkıcı olacak kişisel deneyimlerimden dediğim gibi, sorun gidermek için)
Foogod

5

İşte ABD merkezli zaman dilimleri için endişelenmeme gerek olmadığı için ABD merkezli olan kullandığım yöntem.

Geçerli saat dilimini belirlemem gerekirse, şunu da yaparım:

cat /etc/timezone  

veya

sudo hwclock --show  

Ben sonra:

timedatectl set-timezone <_designation_>

<_designation_>aşağıdakilerden biri nerede :

ABD / Doğu
ABD / Orta
ABD / Dağ
ABD / Pasifik
ABD / Alaska
ABD / Aleutian
ABD / Arizona
ABD / Doğu-Indiana
ABD / Hawaii
ABD / Indiana-Starke
ABD / Michigan
ABD / Pasifik-Yeni
ABD / Samoa

ÖRNEĞİN:

timedatectl set-timezone US/Eastern  

Diğer saat dilimi tanımlamaları burada bulunabilir: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


tzselectsaat dilimi dizesini almak için güzel bir yol
Martin Thoma

0

Her bir zaman dilimi uzaklığına karşılık gelmesini istediğiniz zaman dilimi dosyasını seçmediğiniz sürece bunu yapamazsınız.

/ Usr / share / zoneinfo / Etc içindeki dosyaların kullanılmasını öneren bazı cevaplar, ancak bunlarla ilgili sorun DST agnostik olmalarıdır.

Bu nedenle, her ofsetle eşleşecek bir zaman dilimi yapılandırması seçmezseniz ya da DST'yi umursamıyorsanız, bunu genel olarak yapmanın bir yolu yoktur.

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.