これは思ったよりも複雑です。ほとんどのLinuxディストリビューションはそれを異なる方法で行うため、Olson TZ名を取得するための100%信頼できる方法はありません。
以下は、私が過去に使用したヒューリスティックです。
- 最初に/etc/ timezoneを確認し、存在する場合はそれを使用します。
- 次に、/ etc/localtimeがタイムゾーンデータベースへのシンボリックリンクであるかどうかを確認します
- それ以外の場合は、ファイル/ etc/localtimeと同じ内容のファイルを/usr/ share/zoneinfoで検索します
テストされていないサンプルコード:
if [ -f /etc/timezone ]; then
OLSONTZ=`cat /etc/timezone`
elif [ -h /etc/localtime ]; then
OLSONTZ=`readlink /etc/localtime | sed "s/\/usr\/share\/zoneinfo\///"`
else
checksum=`md5sum /etc/localtime | cut -d' ' -f1`
OLSONTZ=`find /usr/share/zoneinfo/ -type f -exec md5sum {} \; | grep "^$checksum" | sed "s/.*\/usr\/share\/zoneinfo\///" | head -n 1`
fi
echo $OLSONTZ
この簡単な例では、複数のTZ名が指定されたファイルと一致する場合(/ usr / share / zoneinfoを参照する場合)は処理されないことに注意してください。適切なTZ名の曖昧性解消は、アプリケーションによって異なります。
-ニック