Ustawienie strefy czasowej w systemie Linux [zamknięte]

157

Ustawiam strefę czasową na GMT + 6 na moim komputerze z systemem Linux, kopiując plik zoneinfo do /etc/localtime, ale datepolecenie wciąż pokazuje czas jako UTCtime-6. Czy ktoś może mi wyjaśnić to zachowanie?

Zakładam, że datepolecenie powinno wyświetlać UTCtime+6czas. Oto kroki, które wykonuję:

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
źródło
Czy ustawiono zmienną środowiskową TZ (czy echo $TZtworzy coś oprócz pustej linii)? Lepszym pomysłem może być utworzenie dowiązania symbolicznego /etc/localtimezamiast kopiowania rzeczywistego pliku (w ten sposób będziesz bezpieczny, na wypadek, gdyby dane zoneinfo kiedykolwiek się zmieniły, co najprawdopodobniej nigdy nie zmieni).
Sami Laine
Jaka jest dystrybucja? Różne dystrybucje radzą sobie z tym inaczej!
slm
@slm: Używam Ubuntu 12.04
Rahul Dhobi
Prawdopodobnie nie znasz tej zasady, ale nie należy umieszczać tych samych Q w różnych witrynach SE. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm
2
„To pytanie zostało opublikowane na wielu stronach” Huh, to dla mnie nowe. Nigdy nie spotkałem witryny SE z tak bliskiego powodu. W każdym razie jest to pierwsze pytanie, które pojawia się w Google podczas wyszukiwania zmiany strefy czasowej w Linuksie i jest to najczęściej głosowane pytanie spośród wszystkich, które widziałem, więc może powinno zostać ponownie otwarte?
Ajedi32,

Odpowiedzi:

272

Rzuć okiem na ten post na blogu: Jak: 2 metody zmiany strefy czasowej w systemie Linux .

Distros Red Hat

Jeśli korzystasz z dystrybucji takiej jak Red Hat, to twoje podejście do kopiowania pliku byłoby w większości dopuszczalne.

UWAGA: Jeśli szukasz rozwiązania agresywnego, działa to również na Debianie, chociaż poniżej są prostsze podejścia, jeśli potrzebujesz tylko maszyn Debiana.

$ 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         

Zalecałbym jednak link do niego zamiast kopiowania.

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

Teraz data pokazuje inną strefę czasową:

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

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

Dystrybucje Ubuntu / Debian

Aby zmienić strefę czasową w jednej z tych dystrybucji, możesz użyć tego polecenia:

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

Teraz, kiedy to sprawdzimy:

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

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

UWAGA: W Ubuntu 14.04 i nowszych dostępna jest również ta opcja za pomocą jednego polecenia (źródło: Zapytaj Ubuntu - ustawianie strefy czasowej z terminala ):

$ sudo timedatectl set-timezone Etc/GMT-6

O użyciu „Etc / GMT + 6”

fragment odpowiedzi @ MattJohnson na SO

Podobne strefy Etc/GMT+6są celowo odwracane w celu zapewnienia zgodności wstecznej ze standardami POSIX. Zobacz komentarze w tym pliku .

Prawie nigdy nie powinieneś używać tych stref. Zamiast tego powinieneś używać w pełni nazwanej strefy czasowej, takiej jak America/New_Yorklub innej Europe/Londonodpowiedniej dla Twojej lokalizacji. Zobacz listę tutaj .

slm
źródło
1
odpowiedz na to pytanie tutaj stackoverflow.com/questions/21282367/timezone-setting-in-linux
Rahul Dhobi
@ user3184706 - narobiłeś bałaganu tutaj. Twoje Q tutaj było jak zmienić strefę czasową, na co odpowiedziałem. Trochę o używaniu strefy czasowej GMT .. czy nie, że dostarczone SO A jest dokładne, ale zaniedbałem to tutaj, ponieważ tak naprawdę nie pytałeś o to, choć tak myślałem. Mogę dodać ten bit do tego A lub skopiować / wkleić te informacje tutaj jako własne A.
slm
@ user3184706 - aby spróbować to wyczyścić, dołączyłem do kopalni Matta A, aby go ukończyć.
slm
1
Pamiętaj jednak, że jeśli jesteś w kontenerze, w Ubuntu musisz zainstalować pakiet tzdata, w przeciwnym razie pliki /usr/share/zoneinfonie będą istnieć.
Elliott Slaughter,
1
timedatectldziała również dla SLES 12.
Alexander Malakhov
24

Tak to robię w Ubuntu. Po prostu zamień Asia/Tokyona własną strefę czasową.

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

sudo dpkg-reconfigure -f noninteractive tzdata

Jest bug w tzdata: uzyskać pewne wartości znormalizowane przez 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'
użytkownik241
źródło
To również działa, ale w Debian / Ubuntu odpowiedź slm jest prawdopodobnie łatwiejsza i mniej ryzykowna (brak szans na literówki)
Andreas Hartmann
17

Polecenie tzselect służy do robienia tego, co chcesz.

SHW
źródło
1
I aby skondensować to w jednym wierszu, który ustawia TZzmienną na lokalną strefę czasową - np. Dla America / Los_Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Możesz umieścić tę linię w pliku .profile , as tzselect`, który sugeruje pomoc, gdybyś go uruchomił po wyświetleniu monitu.
sameers