터미널에서 시간대 설정


210

터미널에서 시스템 시계의 시간대를 변경하고 싶습니다.

이것은 할 수 있습니다

tzselect

"터미널에서 GUI를 엽니 다"

또는

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

"gmt로 설정됩니다"

그러나 오프셋 즉 -1 또는 +5 등으로 시간대를 설정하는 방법이 있습니까?

타임 오프셋 또는 보고서 로그를 조정하는 응용 프로그램을 작성 중이므로이 작업을 수행해야하며 내가 가진 유일한 정보는 사용자 IP입니다. 웹 응용 프로그램을 사용하여 IP의 위치를 ​​찾을 수는 있지만 위치의 오프셋을 얻을 수 있다면 오프셋을 설정해야하지만 영역과 도시를 찾아야하는 경우 정말 고통 스럽습니다. .

누구나 +/- 시간으로 시스템 시계를 설정하는 방법에 대한 답을 알고 있다면 좋을 것입니다.


허용 된 답변을 받도록 도와주세요. @Mitch
Nam G VU

1
@NamGVU 아니요, Mitch 's는 최상의 솔루션이 아니며 "터미널의 GUI"답변입니다. OP조차도 "사용자 입력없이 프로그램에서 시간대를 변경해야하기 때문에 작동하지 않을 것입니다. 나는 GUI 솔루션이 아닌 터미널에 피드 할 수있는 명령이 필요합니다 ." "스크립트 친화적 인 것. 콜린 앤더슨 은 도시를 알면 더 좋습니다. 라이언 은 일반 GMT + -n입니다.
Xen2050

우분투 18.04에서 tzselect는 GUI를 열지 않습니다. 터미널 기반 메뉴 선택이 있습니다.
Tim Richardson

답변:


321

터미널에서 시간대를 변경하려면 키보드에서 Ctrl+ Alt+ T를 눌러 터미널을 엽니 다. 열리면 아래 명령을 실행하십시오.

sudo dpkg-reconfigure tzdata

일단 열면 화면을 따라 시간대를 변경하십시오.


14
이 작업 습관 난 내가 응답을 단말기로하지 GUI 용액 확실히 공급할 수있는 명령이 필요한 사용자 입력없이 프로그램 ALTR 시간대 필요로
user2155009

1
고마워!!! 내가 이미 수동으로 변경하고있어 BYT이, 도움 등 / 시간대 등) = php.net/manual/en/timezones.php ! 절대적으로 동일!
Vladimir Ch

tzdata를 재구성하면 표준 시간대 전환 후에 표시된 시간이 동일하게 유지되도록 하드웨어 시계도 조정하는 것 같습니다. 시간이 정확하지만 시간대가 잘못된 경우 원할 수 있습니다. 그러나 여행하는 동안 하드웨어 시계를 만지고 싶지는 않습니다. timedatectl 접근 방식은 단지 시간대를 변경할 것으로 보인다.
SnakE

@SnakE 나에게 시간 변경 표시
RiaD

나는 왜 당신이 내 친구라고 말했는지 문제없이 쉼표 라인에서 퍼티에서 그것을 바꿨습니까? @ADTC
saber tabatabaee yazdi

170

timedatectl14.04에서 새로운 기능 을 사용하여 시간을 설정할 수도 있습니다 .

sudo timedatectl set-timezone America/New_York

우분투에 어떻게 설치합니까?
0으로 나누기

1
기본적으로 14.04에 설치됩니다.
Collin Anderson

6
사용 가능한 모든 옵션을 보려면을 실행하십시오 ls -R --group-directories-first /usr/share/zoneinfo. (여기에서 파일을 수정하거나 지우지 않도록주의하십시오.)posixright접두사 에 대한 자세한 정보 는 여기에 있습니다 .
ADTC

작동합니다! ...
Dan Nissenbaum

3
sudo timedatectl set-timezone Etc/UTCUTC에 사용하십시오 .
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 존재하고 있는지 잘 모르겠습니다. 명령을 올바르게 사용합니까? 메신저 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 '/ 응답 / 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 2012 년

@PatrickCornelissen 우선, tzdata이미 답변이 있으므로 동일한 것을 제안하는 것은 의미가 없습니다. 둘째, tzdata거의 동일합니다. 자신이 선호하는 것을 결정하는 것은 사용자의 몫입니다.
Sergiy Kolodyazhnyy

1
음, 종종 문제에 이르게 배포 도구 "에 대해"작업, 그래서 가능하다면 나는 당신의 접근을 방지 싶지만, 공정 충분히 솔루션은 (현재) 일 것
패트릭 코넬리

내가 이해하는 것처럼이 솔루션은 다른 배포판에서 작동합니다. 그러나 여전히 / usr / share / zoneinfo 디렉토리에 사용 가능한 시간대 데이터베이스가 필요합니다. tzdata 패키지를 설치하지 않고 시간대 데이터베이스를 얻는 방법이 있습니까?
andho

@andho /var/lib/dpkg/info/tzdata.list모든 항목 /usr/share/zoneinfo이 해당 패키지와 함께 제공됨을 제안하므로 모든 항목 을 갖기 위해서는 패키지를 설치해야한다고 가정하지만 솔직히 확실하지 않으며 다른 항목에서 작동하는 방식에 익숙하지 않습니다. 분포. 유닉스 및 리눅스 에 대한 질문으로 이것을 고려하고 질문에 대한 컨텍스트를 제공하려면이 게시물을 참조하십시오.
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은 올바른 파일에 대한 심볼릭 링크 입니다. cp변경하는 데 사용 하면 실제로 현재 가리키는 tzdata 파일의 내용을 실제로 클로버하므로 UTC tzdata 파일에는 UTC 대신 유럽 / 런던의 시간대 데이터가 포함됩니다. 개인적인 경험에서 알 수 있듯이 문제를 해결하려면)
Foogod

5

내가 사용하는 방법은 미국 이외의 시간대에 대해 걱정할 필요가 없으므로 미국 중심입니다.

현재 시간대를 결정해야하는 경우 다음 중 하나를 수행합니다.

cat /etc/timezone  

또는

sudo hwclock --show  

그런 다음 수행합니다.

timedatectl set-timezone <_designation_>

여기서 <_designation_>다음 중 하나입니다 :

미국 / 동부
미국 / 중앙
미국 / 마운틴
미국 / 태평양
미국 / 알래스카
미국 / 알 루시아
미국 / 애리조나
미국 / 동부 인디애나
미국 / 하와이
미국 / 인디애나-스타 케
미국 / 미시간
미국 / 태평양
미국 / 사모아

EG :

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.