Para passar uma data para usar em date
, use a opção -d
. Então, seu comando ficaria parecido com echo "20150903154607" | xargs date +"%Y%m%d%H%M%S" -u -d
.
No entanto, não é preciso exatamente o formato de data que você está fornecendo:
$ date -d 20150903154607
date: invalid date ‘20150903154607’
$ date -d 20150903\ 15:46:07
Thu Sep 3 15:46:07 BST 2015
Então massageie um pouco primeiro (GNU sed):
$ echo "20150903154607" \
| sed -re 's/^([0-9]{8})([0-9]{2})([0-9]{2})([0-9]{2})$/\ ::/' \
| xargs date -u -d
Thu Sep 3 15:46:07 UTC 2015
Para converter de local para UTC, você precisa fazer um pouco mais, porque -u
afeta a interpretação das datas de entrada e saída:
$ echo "20150903171734" \
| sed -re 's/^([0-9]{8})([0-9]{2})([0-9]{2})([0-9]{2})$/\ ::/' \
| xargs date +@%s -d \
| xargs date -u +%Y%m%d%H%M%S -d
20150903161734
A primeira invocação de date
acima converte a hora local (de acordo com $TZ
) em segundos desde a época; o segundo converte os segundos-epoch na data e hora UTC.