用 JSON 值中人类可读的等价物更新 unix 时间戳(以毫秒为单位)

update unix timestamps (in ms) with their human-readable equivalents in a JSON value

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

文件内容如下所示:

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

我尝试使用命令 date 将日期转换为 sed 但无法正常工作。 => 案例 1:纪元日期被替换但日期未执行。

$ cat myfile.json | sed -e "s/\([0-9]\{13,\}\)/date -d @/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 @)/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"
  }
]