De acordo com a fonte de análise -datetime.y do gnulib , parece ser uma funcionalidade relacionada com a função time_zone_hhmm .
Primeiro, não podemos usar seu formato para adicionar segundos: date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 - 00:05:01"
, estou com um erro de análise:
date: invalid date ‘2015-07-27 00:11:22 - 00:05:01’
Então, de acordo com o cabeçalho da função time_zone_hhmm:
/* Convert a time zone expressed as HH:MM into an integer count of
minutes. If MM is negative, then S is of the form HHMM and needs
to be picked apart; otherwise, S is of the form HH. As specified in
http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
only valid TZ range, and consider first two digits as hours, if no
minutes specified. */
Parece que você está modificando o fuso horário, que corresponde ao comportamento do tempo de adição / remoção invertido.
Se você quiser realizar artromias pontualmente, é melhor usar os registros de data e hora da Epoch (data + '% s'), que são mais fáceis de realizar cálculos. Além disso, eles são baseados no horário UTC, que não leva em conta o fuso horário local do servidor em que você está trabalhando.
Um timestamp retornará o mesmo resultado nos EUA, na Ásia ou na Europa. Em seguida, você usa esse carimbo de data / hora para exibir o tempo de leitura humana, o que leva em conta o Fuso Horário.
De qualquer forma, boa captura. Eu nunca teria cavado a fonte do gnulib sem esse truque legal!