현재 시간대를 "지역/도시"로 가져옵니다.

현재 시간대를 "지역/도시"로 가져옵니다.

안타깝게도timedatectl set-timezone업데이트되지 않음/etc/timezone.

Region/City예를 들어, 현재 시간대를 얻는 방법은 다음과 같습니다.

% timedatectl | grep zone
                       Time zone: Asia/Kuala_Lumpur (+08, +0800)

마지막 부분을 얻을 수 있습니다.

% date +"%Z %z"
+08 +0800

Asia/Kuala_Lumpur완전한 보호를 받지 않고 어떻게 그 부분을 얻을 수 있습니까 awk?

Linux를 사용하고 있는데 POSIX 방식이 있나요?

답변1

존재하다댓글: Stéphane Chazelas, 그는 이렇게 말했습니다.

timedatectlsystemd시간대 이름(예:)에 대해 쿼리를 수행하고 파생하는 것입니다 . 기호 링크가 아닌 경우 해당 시간대 정의 파일에 해당 정보가 포함되어 있지 않기 때문에 이름을 파생할 수 없습니다.timedateddbustimedatedEurope/Londonreadlink()/etc/localtime/etc/localtime

이를 바탕으로 그리고토니 오크의 리뷰, 다음을 컴파일했습니다.

#!/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

답변2

시간대의 경우 위치정보를 사용할 수 있습니다.

$ curl https://ipapi.co/timezone
America/Chicago

또는:

$ curl http://ip-api.com/line?fields=timezone
America/Chicago

http://wiki.archlinux.org/index.php/time#Time_zone

관련 정보