답변:
일반적으로 TZ
환경 변수는 유용한 것을 알려줍니다. 그러나, 같은 기능을 사용하는 것이 가장 좋습니다 mktime()
과 localtime()
사이의 변환 time_t
로컬 시간대 표현입니다. 즉, 변환을 직접 시도하지 마십시오 .
date
.
echo $TZ
에서 나를 위해 아무것도 반환하지 않습니다.
콘솔에서 의미하는 경우 다음을 입력하십시오.
date +%Z
숫자 시간대를 원할 경우 :
date +'%:z %Z'
샘플 출력 :
-05:00 EST
:z EST
date
. BusyBox 버전은 제 경우에 무의미한 "% : z CEST"를 인쇄합니다.
linux
ubuntu-10.04
대신 "미국 / 동부"또는 "유럽 / 런던"형식으로 시간대를 찾고 싶었습니다. 다음에서 찾을 수 있습니다.
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 {}"\;
일치하는 파일을 찾으려면 더 좋은 방법이 있지만 작동합니다. 일치하는 항목이 여러 개 있습니다.
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
우분투를 위해 이것을 시도하십시오 :
$ cat /etc/timezone
샘플 출력 :
Asia/Kolkata
다른 배포판 참조 : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
때때로 당신은 date %Z
예를 들어 짧은 형식이 아닌 표준 시간대를 찾고있을 수 있습니다 US/Eastern
. timedatectl
Fedora 와 같은 시스템 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
시간대의 경우 지리적 위치를 사용할 수 있습니다.
$ curl https://ipapi.co/timezone
America/Chicago
또는:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
/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- 백만 년 전까지 시계가 계속 잘 작동하도록합니다.
TZ 또는 날짜를 사용하면 기본 시스템 시간대가 아닌 USER의 시간대를 알려주므로 신뢰할 수 없습니다.
기본 시스템 시간대는 / etc / timezone (종종 시간 대별 시간대 데이터 파일에 대한 심볼릭 링크)에 저장됩니다. / etc / timezone이 없으면 / etc / localtime을보십시오. 일반적으로 "서버"시간대입니다. / etc / localtime은 종종 / usr / share / zoneinfo의 시간대 파일에 대한 심볼릭 링크입니다. 올바른 시간대 파일의 경로는 종종 지리 정보도 제공합니다.
최신 리눅스에는 "timedatectl"이있어 명령이 실행될 때 많은 정보를 제공합니다.
(사이드 노드로서, 여전히 OLD 하드 코딩 된 시간대를 사용하는 고대 시스템을 사용하는 경우 최신 시간대 파일을 복사 할 수 있으며 작동 할 것입니다. 시간대 변경을 해결하려면이 작업을 여러 번 수행해야했습니다. 구형 장비).
때로는 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
참고 문헌 : 이 답변에서 .