Ответ 1
Это сложнее, чем кажется. Большинство дистрибутивов 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 будет зависеть от вашего приложения.
-nick