在 JSON 值中使用人类可读的等效项更新 UNIX 时间戳(以毫秒为单位)



我有一个文件,里面编码了一些纪元日期(毫秒(。 我想解析该文件以将纪元转换为人类可读的日期格式。

这是文件内容的样子:

{
"Date": "1555095683495",
"read": "1"
},
{
"Date": "1555578329532",
"read": "1"
},

我试图通过使用命令日期来转换日期,但无法使其正常工作。=> 情况 1:纪元日期被替换,但日期不执行。

$ cat myfile.json | sed -e "s/([0-9]{13,})/date -d @1/g"*
{
"Date": "date -d @1555095683495",
"read": "1"
},
{
"Date": "date -d @1555578329532",
"read": "1"
}

==> 情况 2:纪元日期被执行的日期命令替换,但它将 @1 作为值而不是好的值......

$cat myfile.txt | sed -e "s/[0-9]{13,}/$(date -d @1)/g"
{
"Date": "jeu 01 jan 1970 01:00:01 CET",
"read": "1"
},
{
"Date": "jeu 01 jan 1970 01:00:01 CET",
"read": "1"
}

任何帮助都值得赞赏,以使其正常工作。 我还假设该值必须除以 1000 才能获得毫秒,但不知道如何让两者正常工作。

使用 JQ,将每个时间戳转换为一个数字,将结果除以 1000 以获得内置日期操作可以理解的值,并将其提供给strflocaltime以获得人类可读的日期字符串。

$ jq '.[].Date |= (tonumber / 1000 | strflocaltime("%c %Z"))' file
[
{
"Date": "Fri Apr 12 22:01:23 2019 +03",
"read": "1"
},
{
"Date": "Thu Apr 18 12:05:29 2019 +03",
"read": "1"
}
]