การตั้งค่าเขตเวลาจากเทอร์มินัล


210

ฉันต้องการเปลี่ยนเขตเวลาของนาฬิการะบบจากเทอร์มินัล

ซึ่งสามารถทำได้ด้วย

tzselect

"ซึ่งเปิดกุยในเทอร์มินัล"

หรือ

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

"ซึ่งจะตั้งเป็น gmt"

แต่มีวิธีตั้งค่าเขตเวลาด้วยออฟเซ็ตเช่น. -1 หรือ +5 หรือไม่

ฉันต้องทำสิ่งนี้ขณะที่ฉันกำลังเขียนแอปพลิเคชันเพื่อปรับการตั้งค่าเวลาหรือรายงานบันทึกและข้อมูลเดียวที่ฉันมีคือ IP ของผู้ใช้ ฉันสามารถใช้เว็บแอพเพื่อค้นหาที่ตั้งของ IP แต่จากนั้นฉันต้องตั้งค่าออฟเซ็ตซึ่งจะง่ายถ้าฉันเพิ่งได้ออฟเซ็ต แต่ถ้าฉันต้องการหาโซนและเมืองมันจะเจ็บปวดจริง .

หากใครรู้คำตอบของวิธีการตั้งค่านาฬิการะบบด้วย +/- ชั่วโมงจะดี


โปรดช่วยเราเลือกคำตอบที่ได้รับการยอมรับ ฉันคิดว่าคำตอบของ @ Mitch คือaskubuntu.com/a/323163/22308 ที่
Nam G VU

1
@NAMGVU ไม่มิทช์ไม่ใช่ทางออกที่ดีที่สุดมันเป็นคำตอบ "GUI ในเทอร์มินัล" แม้แต่ OP กล่าวว่า"สิ่งนี้ใช้งานไม่ได้เพราะฉันต้องการ altr timezone จากโปรแกรมที่ไม่มีการป้อนข้อมูลของผู้ใช้ฉันต้องการคำสั่งที่ฉันสามารถป้อนเข้าไปใน terminal ไม่ใช่ทางออก gui"และนั่นเป็นจุดประสงค์เดียวกันที่ต้องการหา "เป็นมิตรกับสคริปต์ Collin Andersonจะดีกว่าถ้าคุณรู้จักเมืองหรือRyanสำหรับธรรมดา GMT + -n
Xen2050

ใน Ubuntu 18.04 tzselect ไม่เปิด gui มีการเลือกเมนูตามเทอร์มินัล
ทิมริชาร์ดสันเมื่อ

คำตอบ:


321

หากต้องการเปลี่ยนเขตเวลาจากเทอร์มินัลเพียงกดCtrl+ Alt+ Tบนแป้นพิมพ์เพื่อเปิดเทอร์มินัล เมื่อเปิดขึ้นให้เรียกใช้คำสั่งด้านล่าง:

sudo dpkg-reconfigure tzdata

เมื่อเปิดแล้วเพียงทำตามหน้าจอเพื่อเปลี่ยนเขตเวลา


14
นี้จะไม่ทำงานตามที่ฉันต้องการ altr เขตเวลาจากโปรแกรมโดยไม่มีการป้อนข้อมูลของผู้ใช้ฉันต้องการคำสั่งฉันสามารถป้อนลงใน terminal ไม่แก้ปัญหา gui ขอบคุณสำหรับการตอบกลับ
user2155009

1
ขอบคุณ!!! สิ่งนี้ช่วยได้, byt ฉันเปลี่ยนไปแล้วด้วยตนเอง/ timezone =) เช่นphp.net/manual/en/timezones.php !!! เหมือนกันอย่างแน่นอน !!!
Vladimir Ch

การกำหนดค่า tzdata ใหม่ดูเหมือนว่าจะปรับนาฬิกาฮาร์ดแวร์ด้วยเพื่อให้เวลาที่แสดงยังคงเหมือนเดิมหลังจากเปลี่ยนเขตเวลา คุณอาจต้องการที่ถ้าเวลาของคุณถูกต้อง แต่เขตเวลาผิด อย่างไรก็ตามคุณไม่ต้องการสัมผัสนาฬิกาฮาร์ดแวร์ในขณะเดินทาง วิธี timedatectlดูเหมือนว่าจะเปลี่ยนโซนเวลาเท่านั้น
SnakE

@SnakE สำหรับฉันแสดงเวลาเปลี่ยนแปลงตาม
RiaD

ฉันเปลี่ยนจากผงสำหรับอุดรูจากบรรทัดคอมม่าโดยไม่มีปัญหาว่าทำไมคุณถึงบอกว่าเพื่อนของฉัน @ADTC
saber tabatabaee yazdi

170

นอกจากนี้คุณยังสามารถใช้ใหม่timedatectlเพื่อตั้งเวลาใน 14.04

sudo timedatectl set-timezone America/New_York

คุณติดตั้งบน Ubuntu ได้อย่างไร?
หารด้วย Zero

1
มันติดตั้งโดยค่าเริ่มต้นใน 14.04
Collin Anderson

6
ls -R --group-directories-first /usr/share/zoneinfoหากต้องการดูตัวเลือกทั้งหมดคุณสามารถเรียกใช้ (ระวังอย่าให้แก้ไขหรือลบไฟล์ใด ๆ ที่นี่.)ข้อมูลเพิ่มเติมเกี่ยวกับposixและrightคำนำหน้าเป็นที่นี่
ADTC

มันใช้งานได้! ...
Dan Nissenbaum

3
ใช้sudo timedatectl set-timezone Etc/UTCสำหรับ UTC
Zoltán

19

คุณสามารถใช้เวลา GMT ± x/usr/share/zoneinfo/Etcไฟล์ใน

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

ขอบคุณ allot สำหรับการตอบกลับฉันได้รับข้อผิดพลาด ln: ล้มเหลวในการสร้างลิงค์สัญลักษณ์ `/ etc / localtime ': ไฟล์มีอยู่ oboiusly im ไม่แน่ใจว่า im กำลังทำอะไรคุณรู้ดีเกี่ยวกับการกวดวิชานี้หรือแม้แต่คำสำคัญที่ฉันสามารถ google ขอบคุณฉัน ใช้คำสั่งถูกต้องหรือไม่ ฉันใช้ sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime เพื่อตั้งค่านาฬิกาเป็น + 1gmt
user2155009

9
minitech ลืมธงกองทัพฉันเดาว่างั้น -> sudo ln -sf ....
Tele

1
นี้ค่อนข้างจะทำงาน แต่จะไม่อัปเดตชื่อ TZ /etc/timezoneใน
poolie

1
หากต้องการอัปเดต / etc / timezone ให้เรียกใช้sudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme

17

ฉันรู้ว่ากระทู้นี้ค่อนข้างเก่า แต่ฉันกำลังมองหาทางออกที่ดีกว่าเพราะฉันต้องการตั้งค่าเขตเวลาใน VM โดยอัตโนมัติหลังจากที่ผู้ใช้ดาวน์โหลดจากเว็บไซต์ของเราและปรับใช้ นี่คือสิ่งที่ฉันลงเอยด้วย:

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"

สิ่งนี้จะทำการค้นหา geoip.ubuntu.com จากเซิร์ฟเวอร์เมื่อมันเริ่มทำงานบนเครือข่ายใหม่ (สคริปต์ของฉันตรวจสอบการเชื่อมต่อหลักสูตรแรก) จากนั้นตั้งค่าเขตเวลาของเซิร์ฟเวอร์ตามการตอบสนอง

"wget ​​-q0 -" บอก wget ให้แสดงผลลัพธ์เฉพาะผลลัพธ์ไปยัง stdout ซึ่งจะถูกไพพ์ไปยังตัวแปร $ tz

หวังว่ามันจะช่วยให้ใครบางคน!


1
ที่ดี! บน Ubuntu 16.04 ควรเป็น "grep zone" และ "print $ 3" ​​แทน
user334639

ฉันเสนอ cli ที่ต่างออกไปเพื่อให้ได้เขตเวลา มุมมองของฉันสะอาดขึ้นเล็กน้อย: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic

11

TL; DR การเชื่อมโยงสัญลักษณ์ที่ชี้ไปยังไฟล์ใน/etc/localtime /usr/share/zoneinfo/Continent/Cityคุณสามารถเปลี่ยนเขตเวลาของคุณได้

ในการเปลี่ยนเขตเวลาให้ลบ/etc/localtimeและกำหนดลิงก์สัญลักษณ์ไปยังเมืองที่คุณต้องการ ยกตัวอย่างเช่นรายงานว่าไฟล์นี้ชี้ไปที่ls -l /etc/localtime /usr/share/zoneinfo/America/Denverหากต้องการเปลี่ยนเป็นนิวยอร์กฉันก็ทำได้

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. รอสักครู่เพื่อให้นาฬิกาของฉันได้รับการอัพเดต

ร้องหน้าจอแสดงขั้นตอนและการยืนยันจาก timedatectl

ป้อนคำอธิบายรูปภาพที่นี่


เป็นเรื่องดีที่จะเข้าใจว่าเกิดอะไรขึ้นหลังม่าน แต่คุณไม่คิดว่ามันจะเป็นการดีกว่าที่จะแนะนำเครื่องมือที่กำหนดไว้สำหรับสิ่งนี้เช่น dpkg-reconfigure tzdata เป็นต้น
Patrick Cornelissen

@PatrickCornelissen ก่อนอื่นมีคำตอบtzdataแล้วดังนั้นการแนะนำสิ่งเดียวกันนั้นไร้ประโยชน์ ประการที่สองtzdataก็ทำเช่นเดียวกัน ขึ้นอยู่กับผู้ใช้ในการตัดสินใจเลือกสิ่งที่พวกเขาต้องการดังนั้นจึงไม่ดีขึ้นหรือแย่ลง - แค่ความชอบของบุคคล
Sergiy Kolodyazhnyy

1
ดีทำงาน "ต่อต้าน" เครื่องมือกระจายมักจะนำไปสู่ปัญหาดังนั้นฉันหลีกเลี่ยงวิธีการของคุณถ้าเป็นไปได้ แต่พอแก้ปัญหาของคุณจะทำงาน (ปัจจุบัน)
แพทริค Cornelissen

วิธีแก้ปัญหาที่ฉันเข้าใจทำงานข้ามการกระจายต่าง ๆ แต่ยังต้องการฐานข้อมูลเขตเวลาที่มีอยู่ในไดเรกทอรี / usr / share / zoneinfo มีวิธีรับฐานข้อมูลเขตเวลาโดยไม่ต้องติดตั้งแพ็คเกจ tzdata หรือไม่
andho

@ andho เนื่องจาก/var/lib/dpkg/info/tzdata.listแนะนำว่ารายการทั้งหมดที่/usr/share/zoneinfoมาพร้อมกับแพคเกจนั้นฉันคิดว่าคุณจำเป็นต้องติดตั้งแพคเกจเพื่อให้มีรายการทั้งหมด แต่ตรงไปตรงมาฉันไม่แน่ใจรวมถึงไม่คุ้นเคยกับวิธีการทำงานอื่น ๆ การกระจาย ลองถามคำถามนี้กับUnix & Linuxและอย่าลังเลที่จะอ้างอิงโพสต์นี้หากคุณต้องการระบุบริบทของคำถาม
Sergiy Kolodyazhnyy

10

sudo dpkg-reconfigure tzdataวิธีที่ง่ายต่อการปรับปรุงเขตเวลาคือการใช้ แต่นี่ไม่ใช่สคริปต์อย่างง่ายดาย

หากคุณต้องการตั้งค่าเขตเวลาอย่างชัดเจนผ่านสคริปต์ (เช่นสำหรับการตั้งค่า VM) นี่คือสูตร:

ตั้งค่าตัวแปรสำหรับเขตเวลาที่คุณต้องการเช่นหนึ่งใน

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

/usr/share/zoneinfoค่าที่ถูกต้องเป็นไดเรกทอรีและชื่อไฟล์ภายใต้

จากนั้นก็ง่ายๆ

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

โปรดทราบว่าทั้งสอง/etc/localtimeและ/etc/timezoneจะต้องสอดคล้องกัน

ตอนนี้อาจรีบูตเพื่อรับบริการทั้งหมดของคุณด้วยเช่นกัน (cron)


-1: อย่าใช้cpเพื่อตั้งค่า / etc / localtime / etc / localtime เป็นsymlinkไปยังไฟล์ที่ถูกต้อง หากคุณใช้cpในการเปลี่ยนแปลงคุณจะปิดบังเนื้อหาของไฟล์ tzdata ใด ๆ ที่กำลังชี้ไปในทันทีดังนั้น (เช่น) ไฟล์ UTC tzdata มีข้อมูลเขตเวลาสำหรับยุโรป / ลอนดอนแทนที่จะเป็น UTC ซึ่งไม่ดี (และน่ารำคาญ การแก้ไขปัญหาที่ผมสามารถพูดจากประสบการณ์ส่วนตัว)
Foogod

5

นี่คือวิธีที่ฉันใช้ซึ่งเป็นศูนย์กลางของสหรัฐอเมริกาเนื่องจากฉันไม่ต้องกังวลเกี่ยวกับเขตเวลาที่ไม่ใช่ของสหรัฐอเมริกา

หากฉันต้องการกำหนดเขตเวลาปัจจุบันฉันจะทำ:

cat /etc/timezone  

หรือ

sudo hwclock --show  

ฉันทำแล้ว:

timedatectl set-timezone <_designation_>

ที่<_designation_>หนึ่งต่อไปนี้:

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

เช่น:

timedatectl set-timezone US/Eastern  

การกำหนดเขตเวลาอื่นสามารถดูได้ที่นี่: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


tzselectเป็นวิธีที่ดีในการรับค่าเขตเวลา
Martin Thoma

0

คุณไม่สามารถทำสิ่งนี้ได้เว้นแต่ว่าคุณจะเลือกไฟล์โซนเวลาที่คุณต้องการให้ตรงกับแต่ละโซนเวลา

คำตอบบางข้อเสนอแนะให้ใช้ไฟล์ใน / usr / share / zoneinfo / Etc แต่ปัญหาของไฟล์เหล่านี้คือ DST ไม่เชื่อเรื่องพระเจ้า

ดังนั้นหากคุณเลือกการกำหนดค่าโซนเวลาบางส่วนเพื่อให้ตรงกับการชดเชยแต่ละครั้งหรือคุณไม่สนใจ DST ก็ไม่มีวิธีที่จะทำเช่นนั้นได้โดยทั่วไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.