用jq格式化时间

时间:2018-12-13 17:11:02

标签: json jq strptime strftime

我正在构建AWS中的EBS卷列表。

我需要将创建时间设置为更加用户友好的格式。管理层抱怨时间不可读。

如果运行此命令,则将以以下格式显示创建卷的时间:

aws ec2 describe-volumes --volume-ids vol-066e24cb8d2294605 | jq -r  '.Volumes[].CreateTime'

2018-12-11T18:54:26.110Z

我正在尝试使用strftime格式化时间,但是它不起作用。我得到的是这个错误:

aws ec2 describe-volumes --volume-ids vol-066e24cb8d2294605 | jq -r  '.Volumes[] | .CreateTime | strftime ("%Y-%m-%d %H:%M:%S")'

jq: error (at <stdin>:39): strftime/1 requires parsed datetime inputs

我遇到什么问题?给定AWS提供给我的时间格式,如何创建用户友好的时间?

1 个答案:

答案 0 :(得分:0)

您首先必须解析字符串。您可以使用strptime。这是如何执行此操作的说明:

<<< '"2018-12-11T18:54.11Z"' jq -c '
strptime("%Y-%m-%dT%H:%M.%SZ")' 
[2018,11,11,18,54,11,2,344]

这与您的需求不完全匹配,因为在这种情况下,“%S”具有特定含义:

%S     The second as a decimal number (range 00 to 60).
       (The range is up to 60 to allow for occasional leap seconds.)

因此,您似乎可能需要修改输入的日期时间字符串,例如:

if test("\\....Z$") then sub(".Z$"; "Z") else . end
| strptime("%Y-%m-%dT%H:%M.%SZ")
| strftime("%Y-%m-%d %H:%M:%S")