안타깝게도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, 그는 이렇게 말했습니다.
timedatectl
systemd
시간대 이름(예:)에 대해 쿼리를 수행하고 파생하는 것입니다 . 기호 링크가 아닌 경우 해당 시간대 정의 파일에 해당 정보가 포함되어 있지 않기 때문에 이름을 파생할 수 없습니다.timedated
dbus
timedated
Europe/London
readlink()
/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