Estou fazendo alguns cálculos de fuso horário em bash
. Estou obtendo alguns valores inesperados ao converter a saída da hora de deslocamento do fuso horário em um número inteiro para fazer alguns cálculos adicionais.
Roteiro parcial:
offset=$(date +%z)
echo "$offset"
hours=$(( offset ))
echo "$hours"
Resultado
-0400
-256
Saída desejada (omiti acidentalmente a necessidade de dividir por 100 para a saída final)
-0400
-4
Acho que a aritmética está sendo avaliada como octal. Como posso avaliar a saída de date +%z
como decimal?
offset=$(date +%-z)
daria uma saída de-400
no seu caso.-
depois que o%
símbolo remove o preenchimento de zero.[1] Resposta relevante
Usando
sed
ebc
:Isso lhe dará
2.00
de volta no fuso horário em que estou (+0200
).Com fusos horários estranhos/incomuns:
A
sed
expressão transformará o fuso horário em um "bc
script". Para o fuso horário+HHMM
, o script seráPois
-HHMM
seráO zero está lá porque my
bc
não entende unário+
.Se você só vai lidar com fusos horários completos, então você pode usar
que lhe dará números inteiros.
Se o fuso horário for um número inteiro de horas (data GNU):
Caso contrário (assuma -0427):
Ou, para implementações de datas mais antigas e limitadas, simples:
Isso ainda não é POSIX porque um FS nulo é indefinido para POSIX awk.
Para POSIX, precisamos dividir os caracteres com sed: