从json时间读取的UTC时间在同一命令中更改为UTC + 1

时间:2019-03-21 11:44:51

标签: json curl jq

我用这个命令卷曲:

卷曲“ https://api.sunrise-sunset.org/json?lat=46.745995&lng=7.122781&date=today” | jq'.results.sunrise'

结果是:

“上午5:31:51”

我住在UTC + 1,需要在同一命令中增加一小时。

如果该命令不起作用,则需要使用apt install jq安装jq或将其下载到Windows

2 个答案:

答案 0 :(得分:0)

一种选择是使用对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 '

答案 1 :(得分:0)

使用日期时间格式时,唯一正确的策略是先将其转换为纪元秒,添加所需的偏移量,然后再转换回所需的日期时间格式。否则,迟早您会得到错误计算的日期/时间戳。

例如对于bsd / mac上的"5:31:51 AM"这样的时间戳,加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日期)上,cli有所不同(由于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 $