O GNU libc (e, portanto, qualquer Linux não embarcado) lê /etc/localtime para determinar o fuso horário do sistema (o fuso horário padrão se não for substituído pela variável de ambiente TZ ou por uma configuração específica do aplicativo). * BSD faz a mesma coisa. Alguns sistemas Linux embarcados fazem as coisas de maneira diferente.
/etc/localtime deve ser um link simbólico para um arquivo em /usr/share/zoneinfo/ . Os aplicativos normais não se importam, eles apenas lêem o conteúdo do arquivo, mas os utilitários de gerenciamento do sistema, como timedatectl , importam mais porque também podem alterar a configuração, e fariam isso alterando o destino do link simbólico. / p>
Java faz (ou fez?) as coisas diferem : ele lê /etc/timezone , que contém um nome de fuso horário, que deve ser o caminho para um arquivo relativo a /usr/share/zoneinfo . Não tenho conhecimento de nenhum outro programa que use /etc/timezone e não sei por que a Sun escolheu fazer as coisas de maneira diferente do resto do mundo.