Getting the Canonical Time Zone name in shell script

前端 未结 1 1847
误落风尘
误落风尘 2021-02-18 22:11

Is there a way of getting the Canonical Time Zone name from a Linux shell script? for example, if my configured time zone is PDT, then I would like to get \"America/Los_Angeles

1条回答
  •  無奈伤痛
    2021-02-18 23:07

    This is more complicated than it sounds. Most linux distributions do it differently so there is no 100% reliable way to get the Olson TZ name.

    Below is the heuristic that I have used in the past:

    1. First check /etc/timezone, if it exists use it.
    2. Next check if /etc/localtime is a symlink to the timezone database
    3. Otherwise find a file in /usr/share/zoneinfo with the same content as the file /etc/localtime

    Untested example code:

    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
    

    Note that this quick example does not handle the case where multiple TZ names match the given file (when looking in /usr/share/zoneinfo). Disambiguating the appropriate TZ name will depend on your application.

    -nick

    0 讨论(0)
提交回复
热议问题