리눅스에서 어떤 시간대를 확인하는 방법?


답변:


19

일반적으로 TZ환경 변수는 유용한 것을 알려줍니다. 그러나, 같은 기능을 사용하는 것이 가장 좋습니다 mktime()localtime()사이의 변환 time_t로컬 시간대 표현입니다. 즉, 변환을 직접 시도하지 마십시오 .


2
사용자의 시간대를 알려주는 명령이 있습니까?

26
알겠습니다 date.
Greg Hewgill

server의 두 인스턴스가 있는데 두 서버에서 "date"명령을 지정하면 다른 시간이 표시됩니다. 두 서버의 시간대는 IST입니다. 한 서버의 시간 : Mon Jul 11 ​​10:39:31 IST 2011 및 다른 서버 Mon Jul 11 ​​10:35:31 IST 2011 .. 4 분의 차이가 있습니다.

8
정확한 Pangolin echo $TZ에서 나를 위해 아무것도 반환하지 않습니다.
Iain Samuel McLean Elder

3
@GregHewgill 귀하의 답변은 처음에 도움이되지 않습니다. 답을 수정하십시오. 아래에서 가장 투표가 많은 답변을 참조하십시오. 나는 지금 당신의 대답을 downvote 할 것입니다. 또한 내 컴퓨터에는 기본적으로 TZ 환경이 없습니다.
therealmarv 2016 년

244

콘솔에서 의미하는 경우 다음을 입력하십시오.

date +%Z

2
잘 작동합니다.
Silver Moon

15
이것은 정답입니다
KalenGi

좋은 지적은 ... 그 효과에 대한 답변을 변경
Rasman

그리고 Ubuntu의 명령 줄에서 시간대를 설정하기 위해 다음 링크는 사소한 1 줄 명령을 제공합니다. askubuntu.com/a/524362/182454
Dan Nissenbaum

이것은 +07나를 위해 준다. 얻으려면 Region/City데비안 / 아치를 기반으로 리눅스에, 볼 이 답변을 .
Tom Hale

54

숫자 시간대를 원할 경우 :

date +'%:z %Z'

샘플 출력 :

-05:00 EST

7
OS의 출력에서이 X:z EST
suspectus

7
이것은 리눅스의 경우입니다 .
Paul Vargas

1
보다 정확하게는 이것은 GNU에 적용됩니다 date. BusyBox 버전은 제 경우에 무의미한 "% : z CEST"를 인쇄합니다.
Léo Lam

그러나 날짜 + % z는 OS X에서 제대로 작동합니다. 답변을 수정하는 것이 좋습니다.
Neil Mayhew

1
안녕하세요 @NeilMayhew 감사합니다! HUMM ...하지만 문제는 태그가linux ubuntu-10.04
폴 바 가스

24

대신 "미국 / 동부"또는 "유럽 / 런던"형식으로 시간대를 찾고 싶었습니다. 다음에서 찾을 수 있습니다.

  • / etc / timezone (Ubuntu 및 Red Hat에 존재하지만 Amazon Linux에는 포함되지 않음)
  • ZONE="US/Eastern"/ etc / sysconfig / clock에서 와 같이 (Red Hat 스타일 시스템에서)
  • 또는 / etc / localtime을 / usr / share / zoneinfo에있는 파일 중 하나와 일치 시키려고 시도 할 수 있습니다. 짜증나게 이것은 심볼릭 링크가 아닌 것 같습니다.

    cd / usr / share / zoneinfo
    find * -type f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}"\;

    일치하는 파일을 찾으려면 더 좋은 방법이 있지만 작동합니다. 일치하는 항목이 여러 개 있습니다.


4
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
freiheit


6

때때로 당신은 date %Z예를 들어 짧은 형식이 아닌 표준 시간대를 찾고있을 수 있습니다 US/Eastern. timedatectlFedora 와 같은 시스템 timedatectl에서 현재 영역을 포함하여 많은 유용한 정보를 출력합니다.

# timedatectl
      Local time: Tue 2016-09-13 17:10:26 EDT
  Universal time: Tue 2016-09-13 21:10:26 UTC
        RTC time: Tue 2016-09-13 21:10:26
       Time zone: US/Eastern (EDT, -0400)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

불행하게도, timedatectl소요 set-timezone명령으로 있지만 해당이 없습니다 get-timezone. 다음과 같이 구문 분석하십시오.

# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern

4
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

그래서 저는 마운틴 타임에 있습니다. 환경 변수 사용 또는 날짜 명령 출력에 대한 위의 조언은 때로는 사용 방법에 따라 더 잘 작동합니다.



2
  • / etc / sysconfig / clock은 하드웨어 시계를 UTC 또는 현지 시간으로 저장할지 여부를 설정합니다.
  • 시간대를 설정하려면 / etc / localtime을 / usr / share / zoneinfo / ...에 링크하십시오.
  • /sbin/hwclock --systohc [--utc]하드웨어 시계를 설정하려면 입력 하십시오.

Linux 커널은 하드웨어 시계의 UTC 저장 여부에 관계없이 1970 년 1 월 1 일 자정 이후 UTC (초)로 시간을 저장하고 계산합니다. 현지 시간으로의 변환은 런타임에 수행됩니다. 이것에 대한 한 가지 좋은 점은 누군가 다른 시간대의 컴퓨터를 사용하는 경우 TZ 환경 변수를 설정할 수 있으며 모든 날짜와 시간이 해당 시간대에 맞게 나타납니다.

1970 년 1 월 1 일 이후 UTC (초)가 부호있는 32 비트 정수 (Linux / Intel 시스템에서와 같이)로 저장되면 시계가 2038 년에 언젠가 작동을 멈 춥니 다. Linux에는 Y2K 고유의 문제가 없습니다. 하지만 2038 년 문제가 있습니다. 우리 모두 64 비트 시스템에서 리눅스를 실행할 수 있기를 바랍니다. 64 비트 정수는 292271- 백만 년 전까지 시계가 계속 잘 작동하도록합니다.


1

몇 가지 솔루션 :

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

나에게 (각각) 주었다 :

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

내 컴퓨터는 UTC입니다.


0

TZ 또는 날짜를 사용하면 기본 시스템 시간대가 아닌 USER의 시간대를 알려주므로 신뢰할 수 없습니다.

기본 시스템 시간대는 / etc / timezone (종종 시간 대별 시간대 데이터 파일에 대한 심볼릭 링크)에 저장됩니다. / etc / timezone이 없으면 / etc / localtime을보십시오. 일반적으로 "서버"시간대입니다. / etc / localtime은 종종 / usr / share / zoneinfo의 시간대 파일에 대한 심볼릭 링크입니다. 올바른 시간대 파일의 경로는 종종 지리 정보도 제공합니다.

최신 리눅스에는 "timedatectl"이있어 명령이 실행될 때 많은 정보를 제공합니다.

(사이드 노드로서, 여전히 OLD 하드 코딩 된 시간대를 사용하는 고대 시스템을 사용하는 경우 최신 시간대 파일을 복사 할 수 있으며 작동 할 것입니다. 시간대 변경을 해결하려면이 작업을 여러 번 수행해야했습니다. 구형 장비).


0

때로는 timedatectl set-timezone업데이트되지 않으므로/etc/timezone symlink가 /etc/timezone가리키는 파일 이름에서 tiemzone을 얻는 것이 가장 좋습니다 .

#!/bin/bash
set -euo pipefail

if filename=$(readlink /etc/localtime); then
    # /etc/localtime is a symlink as expected
    timezone=${filename#*zoneinfo/}
    if [[ $timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
        # not pointing to expected location or not Region/City
        >&2 echo "$filename points to an unexpected location"
        exit 1
    fi
    echo "$timezone"
else  # compare files by contents
    # https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
    find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
        cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi

참고 문헌 : 이 답변에서 .


0

날짜와 시간대를 동시에 표시 할 수 있습니다.

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.