Cài đặt múi giờ trong Linux [đã đóng]


157

Tôi đang đặt múi giờ thành GMT + 6 trên máy Linux của mình bằng cách sao chép tệp areainfo sang /etc/localtime, nhưng datelệnh vẫn hiển thị thời gian là UTCtime-6. Có ai có thể giải thích cho tôi hành vi này?

Tôi giả sử datelệnh sẽ hiển thị UTCtime+6thời gian. Đây là các bước tôi đang làm theo:

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

Biến môi trường TZ đã được đặt (có echo $TZtạo ra thứ gì đó ngoài một dòng trống không) không? Ngoài ra, có thể là một ý tưởng tốt hơn để tạo một liên kết tượng trưng /etc/localtimethay vì sao chép tệp thực tế (theo cách đó bạn sẽ an toàn, trong trường hợp dữ liệu của khu vực thông tin sẽ thay đổi mà rất có thể sẽ không bao giờ xảy ra).
Sami Laine

Bản phân phối là gì? Các distro khác nhau xử lý này khác nhau!
slm

@slm: Tôi đang sử dụng Ubuntu 12.04
Rahul Dhobi

Bạn có thể không biết chính sách này nhưng bạn không cho rằng đăng cùng một Q trên các trang SE khác nhau. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm

2
"Câu hỏi này đã được đăng trên nhiều trang web" Huh, đó là một câu hỏi mới đối với tôi. Chưa bao giờ gặp phải một trang SE với lý do gần như thế. Dù sao, đây là câu hỏi đầu tiên xuất hiện trên Google khi tìm cách thay đổi múi giờ trong Linux và đó là câu hỏi được bình chọn nhiều nhất trong số tất cả những câu hỏi tôi từng thấy, vậy có lẽ nên mở lại?
Ajedi32

Câu trả lời:


273

Hãy xem bài đăng trên blog này có tiêu đề: Cách thực hiện: 2 phương pháp thay đổi TimeZone trong Linux .

Phân phối mũ đỏ

Nếu bạn đang sử dụng một bản phân phối như Red Hat thì cách tiếp cận sao chép tệp của bạn sẽ hầu như được chấp nhận.

LƯU Ý: Nếu bạn đang tìm kiếm một giải pháp phân biệt, thì nó cũng hoạt động trên Debian, mặc dù có những cách tiếp cận đơn giản hơn dưới đây nếu bạn chỉ cần quan tâm đến các máy Debian.

$ 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         

Tôi sẽ khuyên bạn nên liên kết với nó chứ không phải sao chép.

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

Bây giờ ngày hiển thị múi giờ khác nhau:

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

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

Phân phối Ubuntu / Debian

Để thay đổi múi giờ trên một trong hai phân phối này, bạn có thể sử dụng lệnh này:

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

Bây giờ khi chúng tôi kiểm tra nó:

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

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

LƯU Ý: Ngoài ra còn có tùy chọn này trong Ubuntu 14.04 trở lên với một lệnh duy nhất (nguồn: Hỏi Ubuntu - cài đặt múi giờ từ thiết bị đầu cuối ):

$ sudo timedatectl set-timezone Etc/GMT-6

Về việc sử dụng "Vv / GMT + 6"

trích từ câu trả lời của @ MattJohnson về SO

Các khu như Etc/GMT+6được cố ý đảo ngược để tương thích ngược với các tiêu chuẩn POSIX. Xem các ý kiến ​​trong tập tin này .

Bạn gần như không bao giờ cần phải sử dụng các khu vực này. Thay vào đó bạn nên sử dụng một múi giờ được đặt tên đầy đủ như America/New_Yorkhoặc Europe/Londonhoặc bất cứ điều gì là thích hợp cho vị trí của bạn. Tham khảo danh sách tại đây .


1
tham khảo câu trả lời của câu hỏi này tại đây stackoverflow.com/questions/21282367/timezone-setting-in-linux
Rahul Dhobi

@ user3184706 - bạn đã làm một mớ hỗn độn ở đây. Q của bạn ở đây là cách thay đổi múi giờ, mà tôi đã trả lời. Một chút về việc sử dụng GMT .. múi giờ hay không mà SO A cung cấp là chính xác, nhưng tôi đã bỏ qua việc đưa nó vào đây, vì bạn không thực sự hỏi về điều đó, mặc dù tôi nghĩ. Tôi có thể thêm rằng chút đến A này hoặc bạn có thể sao chép / dán thông tin rằng đây là A. riêng bạn
SLM

@ user3184706 - để thử và dọn dẹp cái này, tôi đã đưa Matt của A vào để hoàn thành.
slm

1
Lưu ý rằng nếu bạn đang ở trong một container, với Ubuntu, bạn phải cài đặt gói tzdatahoặc các tệp khác /usr/share/zoneinfosẽ không tồn tại.
Elliott Sl tàn

1
timedatectlcũng hoạt động cho SLES 12.
Alexander Malakhov

24

Đây là cách tôi làm trong Ubuntu. Chỉ cần thay thế Asia/Tokyobằng múi giờ của riêng bạn.

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

sudo dpkg-reconfigure -f noninteractive tzdata

Có một lỗi trong tzdata: các giá trị nhất định được chuẩn hóa bởi 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'

Điều này cũng hoạt động, nhưng trong Debian / Ubuntu, câu trả lời của slm có lẽ dễ dàng hơn và ít rủi ro hơn (không có lỗi chính tả)
Andreas Hartmann

17

Lệnh tzselect được thực hiện để làm những gì bạn muốn.


1
Và để cô đọng nó thành một dòng duy nhất đặt TZbiến thành múi giờ địa phương của bạn - ví dụ: đối với America / Los_Angele - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Bạn có thể đặt dòng này trong .profile , as tzselect` của bạn một cách hữu ích, bạn có nên chạy nó tại dấu nhắc không.
cùng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.