Usando sed e bc :
date +%z | sed -E 's/^([+-])(..)(..)/scale=2;0( + \/60)/' | bc
Isso lhe dará 2.00 de volta no fuso horário em que estou ( +0200 ).
Com fusos horários estranhos / incomuns:
$ echo '+0245' | sed -E 's/^([+-])(..)(..)/scale=2;0( + \/60)/' | bc
2.75
$ echo '-0245' | sed -E 's/^([+-])(..)(..)/scale=2;0( + \/60)/' | bc
-2.75
A expressão sed transformará o fuso horário em " bc script". Para o fuso horário +HHMM , o script será
scale=2;0+(HH + MM/60)
Por -HHMM será
scale=2;0-(HH + MM/60)
O zero está lá porque meu bc não entende unary + .
Se você só vai lidar com fusos horários de horas inteiras, então você pode usar
date +%z | sed -E 's/^([+-])(..)../0/' | bc
que lhe dará números inteiros.