現在のタイムゾーンを「地域/都市」にインポートします。

現在のタイムゾーンを「地域/都市」にインポートします。

残念ながら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

関連情報