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

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 .



@ 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'

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.