Problemas na conversão de data

1

Eu estava tentando adicionar 1 hora ao tempo existente, pois o carimbo de data / hora está em CST, que estou tentando converter em EST.

out_date3=$(ls -lrt out.log | awk '{print $8}')

que dá saída como 08:45

out_date4=$(out_date3 + 01:00)

Eu quero a saída como 09:45, mas o out_date4 não está funcionando.

    
por Vimal Kumar 15.11.2017 / 16:26

1 resposta

2

Supondo que você esteja trabalhando com os fusos horários dos Estados Unidos e da América Central e Oriental, e supondo que você tenha a data do GNU:

TZ=US/Eastern date --date='TZ="US/Central" 08:45'

A variável de ambiente TZ "externa" (primeiro) informa a data em que ela deve funcionar no fuso horário EUA / Leste; aqui, isso afeta a impressão do tempo após date terminar de processar a entrada. A hora é então especificada usando data da GNU regras de fuso horário , onde as aspas duplas em torno do fuso horário são necessárias. A especificação --date aqui diz que você gostaria de imprimir a hora como ela existe no fuso horário dos EUA / Central às 08:45.

A correção mais curta para o seu código seria:

out_date4=$(TZ=US/Eastern date --date='TZ="US/Central" '"$out_date3")

Nota

A análise da saída de ls será interrompida assim que out.log for modificada pela última vez há mais de 6 meses - o formato de hora da saída de ls mudará de "month day hour: minute" para "mês dia ano" e, de repente, seu extrato do awk enviará o ano em vez das horas & minutos para sua variável out_date3!

Mais flexivelmente, e assumindo novamente os utilitários GNU, use o comando stat para recuperar o horário da última modificação e peça ao date para convertê-lo para você:

out_date3=$(stat -c %Y out.log)
out_date4=$(TZ=US/Eastern date --date @"$out_date3")

Neste ponto, você tem o horário da última modificação de out.log em segundos-desde-o-epoch na variável out_date3. Se você quiser imprimir em vários formatos, date fará isso com prazer:

date --date @"$out_date3"
date +'%H:%M:%S' --date @"$out_date3"
    
por 15.11.2017 / 18:28