Para extrair a parte antes de T
, com shells POSIX:
time=2017-03-08T19:41:26Z
utc_date=${time%T*} # as already said
Ou para ser compatível com Bourne ou para shells não POSIX:
expr "$time" : '\(.*\)T'
Agora, observe que 2017-03-08T19:41:26Z
é o tempo zulu (outro nome para UTC), uma especificação inequívoca de um instante preciso no tempo.
Naquela época, a data era de 2017-03-08 em Londres, mas de 2017-03-09 (no início da manhã) em Bangkok.
Se você quisesse saber a data local (em oposição à data UTC) para essa especificação de horário, isto é, para um usuário de Bangkok obter 2017-03-09 e o usuário de Londres obter 2017-03-08, existem algumas opções.
Com o GNU date
:
time=2017-03-08T19:41:26Z
date -d "$time" +%F
(fácil como data GNU reconhece esse formato zulu pronto)
Mesmo com ksh93
:
printf '%(%F)T\n' "$time"
com zsh
internos:
zmodload zsh/datetime
TZ=UTC0 strftime -rs unix_time %Y-%m-%dT%TZ $time &&
strftime %Y-%m-%d $unix_time
(você pode substituir %Y-%m-%d
por %F
em sistemas como o GNU, em que strftime()
/ strptime()
o suporta).
Semelhante a busybox date
:
unix_time=$(date -u -D %Y-%m-%dT%TZ -d "$time" +%s)
date -d "@$unix_time" +%Y-%m-%d