这比听起来要复杂得多。大多数 linux 发行版的做法都不同,因此没有 100% 可靠的方法来获取 Olson TZ 名称。
以下是我过去使用的启发式方法:
- 首先检查/etc/timezone,如果存在就使用它。
- 接下来检查 /etc/localtime 是否是时区数据库的符号链接
- 否则在 /usr/share/zoneinfo 中找到与文件 /etc/localtime 内容相同的文件
未经测试的示例代码:
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 名称的歧义将取决于您的应用程序。
-缺口