Chcę zmienić strefę czasową zegara systemowego z terminala.
Można to zrobić za pomocą
tzselect
„który otwiera GUI w terminalu”
lub
sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime
„który ustawi na gmt”
Ale czy jest sposób, aby ustawić strefę czasową tylko z przesunięciem tj. -1 lub +5 itd.?
Muszę to zrobić, pisząc aplikację, aby dostosować limit czasu lub zgłosić dzienniki, a jedyne informacje, jakie mam, to adres IP użytkownika. Mogę użyć aplikacji internetowej, aby znaleźć lokalizację adresu IP, ale potem muszę ustawić przesunięcie, co byłoby łatwe JEŚLI mógłbym po prostu uzyskać przesunięcie lokalizacji, ale jeśli muszę znaleźć strefę i miasto, to byłby prawdziwy ból .
Jeśli ktoś zna odpowiedź na pytanie, jak ustawić zegar systemowy z godziną +/-, byłoby świetnie.
Odpowiedzi:
Aby zmienić strefę czasową z terminala, wystarczy nacisnąć Ctrl+ Alt+ Tna klawiaturze, aby otworzyć terminal. Kiedy się otworzy, uruchom poniższe polecenia:
Po otwarciu postępuj zgodnie z ekranami, aby zmienić strefę czasową.
źródło
Możesz także użyć nowego,
timedatectl
aby ustawić czas w 14.04.źródło
ls -R --group-directories-first /usr/share/zoneinfo
. (Uważaj, aby nie modyfikować ani nie usuwać tutaj żadnego pliku.) Więcej informacji na tematposix
iright
prefiksów znajduje się tutaj .sudo timedatectl set-timezone Etc/UTC
dla UTC.Możesz użyć plików GMT ± x w
/usr/share/zoneinfo/Etc
.źródło
/etc/timezone
.sudo dpkg-reconfigure --frontend noninteractive tzdata
Zdaję sobie sprawę, że ten wątek jest nieco przestarzały, ale szukałem lepszego rozwiązania, ponieważ musiałem automatycznie ustawić strefę czasową na maszynie wirtualnej po tym, jak użytkownik pobierze ją z naszej witryny i wdroży. Oto, z czym skończyłem:
Spowoduje to wysłanie zapytania do geoip.ubuntu.com z serwera po uruchomieniu go w nowej sieci (mój skrypt najpierw sprawdza łączność), a następnie ustawi strefę czasową serwera na podstawie odpowiedzi.
„Wget -q0 -” mówi wgetowi, aby wyświetlał tylko wyniki na standardowe wyjście, które jest następnie przesyłane do zmiennej $ tz.
Mam nadzieję, że to komuś pomaga!
źródło
TL; DR
/etc/localtime
jest dowiązaniem symbolicznym, które wskazuje na plik w/usr/share/zoneinfo/Continent/City
. Zmieniając punkt, w którym wskazuje, możesz zmienić strefę czasową.Aby zmienić strefę czasową, usuń
/etc/localtime
i przypisz symboliczne łącze do wybranego miasta. Na przykładls -l /etc/localtime
raporty, które wskazuje ten plik/usr/share/zoneinfo/America/Denver
. Zmieniam to na Nowy Jorksudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
Poniższy zrzut ekranu pokazuje kroki i potwierdzenie od
timedatectl
źródło
tzdata
, więc sugerowanie tego samego nie ma sensu. Po drugie,tzdata
robi prawie to samo. To użytkownik decyduje, co preferuje, więc nie jest ani lepszy, ani gorszy - tylko preferencje danej osoby./var/lib/dpkg/info/tzdata.list
sugeruje, że wszystkie elementy/usr/share/zoneinfo
pochodzą z tego pakietu, zakładam, że musisz zainstalować pakiet, aby mieć wszystkie elementy, ale szczerze mówiąc, nie jestem do końca pewien, a ponadto nie do końca wiem, jak to działa na innych dystrybucje. Rozważ zadanie tego pytania jako pytania w systemach Unix i Linux. Jeśli chcesz podać kontekst pytania, skorzystaj z tego postu.Najłatwiejszym sposobem aktualizacji strefy czasowej jest użycie
sudo dpkg-reconfigure tzdata
. Ale to nie jest tak łatwe do napisania.Jeśli chcesz jawnie ustawić strefę czasową za pomocą skryptu (np. Do konfiguracji maszyny wirtualnej), oto przepis:
Ustaw zmienną dla wybranej strefy czasowej, np. Jedną z
Prawidłowe wartości to katalogi i nazwy plików w obszarze
/usr/share/zoneinfo
.Więc po prostu
Należy zauważyć, że zarówno
/etc/localtime
i/etc/timezone
muszą być spójne.Prawdopodobnie teraz uruchom ponownie komputer, aby zaktualizować wszystkie usługi (np. Cron).
źródło
cp
do ustawiania / etc / localtime. / etc / localtime to dowiązanie symboliczne do poprawnego pliku. Jeśli użyjesz gocp
do zmiany, faktycznie zablokujesz zawartość dowolnego pliku tzdata, na który obecnie wskazuje, więc nagle (na przykład) plik tzdata UTC zawiera dane strefy czasowej dla Europy / Londynu zamiast dla UTC, co jest złe (i irytujące) do rozwiązywania problemów, jak mogę powiedzieć z własnego doświadczenia)Oto metoda, której używam, która koncentruje się na Stanach Zjednoczonych, ponieważ nie muszę się martwić o strefy czasowe poza USA.
Jeśli muszę określić bieżącą strefę czasową, albo:
lub
Następnie wykonuję:
gdzie
<_designation_>
jest jedna z następujących czynności:US / Eastern
US / Central
US / Mountain
US / Pacific
US / Alaska
US / Aleutian
US / Arizona
US / East-Indiana
US / Hawaii
US / Indiana-Starke
US / Michigan
US / Pacific-New
US / Samoa
NA PRZYKŁAD:
Inne oznaczenia stref czasowych można znaleźć tutaj: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
źródło
tzselect
to dobry sposób na uzyskanie ciągu strefy czasowejNie możesz tego zrobić, chyba że wybierzesz plik strefy czasowej, który chcesz dopasować do każdego przesunięcia strefy czasowej.
Niektóre odpowiedzi sugerowały użycie plików w / usr / share / zoneinfo / Etc, ale problem z nimi polega na tym, że są one niezależne od DST.
Tak więc, chyba że wybierzesz konfigurację strefy czasowej pasującą do każdego przesunięcia lub nie przejmujesz się czasem letnim, nie ma sposobu, aby to zrobić ogólnie.
źródło