O comando date , como quase todos os programas, depende da biblioteca padrão para acessar dados de fuso horário. No Linux (exceto para alguns sistemas embarcados) e * BSD, a biblioteca padrão determina o fuso horário atual do conteúdo de /etc/localtime .
Parece que no seu sistema, /etc/localtime não contém o que parece conter. Como Stéphane Chazelas e derobert , eu strongmente suspeite que o arquivo /usr/share/zoneinfo/Etc/UTC , que /etc/localtime é um link simbólico, contenha informações incorretas, provavelmente porque alguém que não sabia o que estava fazendo tentou alterar o fuso horário do sistema e acabou substituindo um arquivo do sistema.
Recomendo a reinstalação das informações de fuso horário para garantir que seu sistema não esteja corrompido. Execute rpm -qf /usr/share/zoneinfo/Etc/UTC para ver qual pacote contém esse arquivo e reinstale-o com yum reinstall . Em seguida, defina o fuso horário corretamente, seja com o timedatectl command ou alterando o link simbólico /etc/localtime e o arquivo de texto /etc/zoneinfo ou /etc/sysconfig/clock (acho que o Fedora usa o último):
ln -snf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
echo Europe/Madrid >/etc/zoneinfo
sed -i -e '/^ *ZONE=/d' /etc/sysconfig/clock
echo 'ZONE="Europe/Madrid"' >>/etc/sysconfig/clock
O Java faz as coisas de maneira diferente - ignora a biblioteca padrão e lê /etc/timezone ou /etc/sysconfig/clock . É por isso que você está vendo informações de fuso horário diferentes dos programas Java.