date: data inválida -d para string em outro fuso horário

1

Servidor definido para o fuso horário do leste. Algumas das minhas tarefas são relativas a este fuso horário e algumas são relativas ao fuso horário Austrália / Adelaide.

$ DATE='date'
$ echo $DATE
Mon Mon Jun 4 15:15:47 EDT 2018
$ DATE_Adelaide='TZ=Australia/Adelaide date -d "$DATE"'
$ echo $DATE_Adelaide
Tue Jun 5 04:45:47 ACST 2018
$ dayName=$(date -d "${DATE_Adelaide}" +%a)
date: invalid date 'Tue Jun 5 04:45:47 ACST 2018'
    
por AlanM 04.06.2018 / 22:47

2 respostas

1

Assumindo a data GNU, use o formato datetime ISO8601 como o formato de transporte comum:

$ date_local=$(date --iso-8601=seconds)
$ echo "$date_local"
2018-06-04T17:01:45-04:00

$ date_adelaide=$(TZ=Australia/Adelaide date -d "$date_local" --iso-8601=seconds)
$ echo "$date_adelaide"
2018-06-05T06:31:45+09:30

$ day_name_local=$(date -d "$date_adelaide" +%a)
$ echo $day_name_local
Mon

$ day_name_adelaide=$(TZ=Australia/Adelaide date -d "$date_adelaide" +%a)
$ echo $day_name_adelaide
Tue
    
por 04.06.2018 / 23:07
0

No meu sistema, quando converti a data no fuso horário Austrália / Adelaide e tentei usar essa data convertida em um comando "date" subsequente, algo no meu sistema impede a interpretação correta do ACST na cadeia de caracteres. Minha solução foi a saída de partes formatadas da data que estava sendo convertida no fuso horário desejado. DATE = $ (data) $ echo $ DATE Ter 5 de jun 14:13:03 EDT 2018 $ TZ = Australia / Adelaide date -d "$ DATE" Qua Jun 6 03:43:03 ACST 2018 $ dayName = $ (TZ = Austrália / Adelaide date -d "$ DATE" +% a) $ dayofmonth = $ (TZ = Austrália / Adelaide date -d "$ DATE" +% d) $ dayofweek = $ (TZ = Austrália / Adelaide date -d "$ DATE" +% w) $ hour = $ (TZ = Austrália / Adelaide date -d "$ DATE" +% H) $ minutes = $ (TZ = Austrália / Adelaide date -d "$ DATE" +% M) echo $ dayName $ dayofmonth $ dayofweek $ hour $ minutos Qua 06 3 03 43

    
por 05.06.2018 / 20:39

Tags