Время UTC считывается с изменения времени json на UTC + 1 в той же команде - PullRequest
0 голосов
/ 21 марта 2019

Я делаю локон с помощью этой команды:

curl "https://api.sunrise -sunset.org / json? Lat = 46.745995 & lng = 7.122781 & date = today " | jq '.results.sunrise'

результат:

"5:31:51 AM"

Я живу в UTC + 1, и мне нужно добавить один час в той же команде.

Если команда не работает, вам нужно установить jq с помощью apt install jq или загрузить ее для Windows

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

единственная правильная стратегия при работе с форматом даты и времени - сначала преобразовать его в секунды эпохи, добавить требуемое смещение, а затем преобразовать обратно в нужный формат даты и времени.В противном случае рано или поздно вы получите неправильно рассчитанную отметку даты / времени.

, например, для отметки времени, например "5:31:51 AM", на bsd / mac добавление 1 часа будет:

bash $ echo "5:31:51 AM" | xargs -L1 -I{} date -j -f"%H:%M:%S %p" {} "+%s" | xargs -I{} echo {}+3600 | bc | xargs -I{} date -j -f"%s" {} "+%H:%M:%S %p"
06:31:51 AM

в linux (gnu date), кли немного отличается (из-за утилиты date):

bash $ echo '"5:31:51 AM"' | xargs -L1 -I{} date -d{} "+%s" | xargs -I{} echo {}+3600 | bc | xargs -I{} date -d @{} "+%H:%M:%S %p"
06:31:51 AM
bash $

после этого вы можете подключить свой curl / jq, но я покажу его, используя мойутилита json - jtc (версия для Mac):

bash $ curl -s "https://api.sunrise-sunset.org/json?lat=46.745995&lng=7.122781&date=today" | jtc -w'[results][sunrise]' | xargs -L1 -I{} date -j -f"%H:%M:%S %p" {} "+%s" | xargs -I{} echo {}+3600 | bc | xargs -I{} date -j -f"%s" {} "+%H:%M:%S %p"
06:31:51 AM
bash $ 
0 голосов
/ 21 марта 2019

Один из вариантов - использовать этот вызов jq:

jq '.results.sunrise
| strptime("%I:%M:%S %p")
| {h: ((.[3] + 1) % 24), m:.[4], s:.[5]}
| if .h < 12 then "\(.h):\(.m):\(.s) AM"
  elif .h == 12 then "\(.h):\(.m):\(.s) PM"
  else "\(.h - 12):\(.m):\(.s) PM"
  end '
...