【问题标题】:Convert all time stamps in JSON file to unix time stamp in bash(Ubuntu)将JSON文件中的所有时间戳转换为bash(Ubuntu)中的unix时间戳
【发布时间】:2023-03-06 02:37:01
【问题描述】:

我正在尝试将文件中的所有时间戳转换为 Unix 时间格式,最好使用 jq/bash/python。

原来的格式有点奇怪:

%Y-%m-%dT%H:%M:%S.%z

GoToMeeting API 的示例文件内容:

[
  {
    "Last Name": "John",
    "Subject": "Meet Now",
    "meetingId": "983329197",
    "meetingType": "immediate",
    "First Name": "Doe",
    "Conference Info": "111-222-333",
    "startdate": "2017-01-25T04:50:25.+0000",
    "enddate": "2017-01-25T05:50:25.+0000",
    "status": "INACTIVE"
  },
  {
    "Last Name": "John",
    "Subject": "dumb meeting",
    "meetingId": "569996685",
    "meetingType": "scheduled",
    "First Name": "Doe",
    "Conference Info": "111-222-333",
    "startdate": "2017-02-15T10:00:00.+0000",
    "enddate": "2017-02-15T10:30:00.+0000",
    "status": "INACTIVE"
  }
]

通过运行这个,我只能将一个值转换为 Unix:

输入:

jq 'strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime';
"2015-03-05T04:50:25.+0000"

输出:

1425531025

这样做的主要目标是过滤掉所有早于当前时间的日期,然后将其转换为本地时间。

【问题讨论】:

  • 原始格式一点也不奇怪。它是 ISO。

标签: json linux bash ubuntu jq


【解决方案1】:

为了解决第一个问题和主要目标,您可能需要定义一个便利函数,这里根据您的单行指定:

def convert: strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime;

回答第一个问题的过滤器可以写成如下:

map( ( .startdate |= convert) | (.enddate |= convert) )

要选择感兴趣的对象,您可以使用上面的 def 和这个过滤器:

now as $now
| map( select((.startdate|convert >= $now) and (.enddate|convert >= $now)))

不幸的是,jq 目前对时区的支持几乎为零,所以我不确定您要如何转换回“本地时间”。通过一些独创性和字符串操作,它可以在 jq 中完成,尽管可能不是最通用的方式。

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 2017-04-25
    • 2020-10-19
    • 2020-07-29
    • 1970-01-01
    • 2023-03-18
    • 2015-10-07
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多