programing

jq 날짜 및 unix 타임스탬프

iphone6s 2023. 4. 2. 10:05
반응형

jq 날짜 및 unix 타임스탬프

따라서 다수의 unix 타임스탬프 값(밀리초 단위)이 있는 데이터가 있습니다.다음과 같은 경우:

{
    "id": "f6922fd5-4f97-4113-820e-b45eba0ae236",
    "published_at": 1461624333859,
    "tracking_id": "a85d5ed5-5efa-461b-aae0-beb2098c0ff7",
}, {
    "id": "835d412f-5162-440c-937b-7276f22c4eb9",
    "published_at": 1461625249934,
    "tracking_id": "86472ba2-ce5f-400f-b42a-5a0ac155c42c",
}, {
    "id": "bc2efcac-67a0-4855-856a-f31ce5e4618e",
    "published_at": 1461625253393,
    "tracking_id": "c005398f-07f8-4a37-b96d-9ab019d586c2",
}

또한 특정 날짜 내의 행을 검색해야 하는 경우가 많습니다.jq로 문의할 수 있으며, 예를 들어 사람이 읽을 수 있는 날짜를 제공할 수 있습니까?2016-04-25그리고 반대로 jq쇼를 할 수 있는지 궁금합니다.published_at인간이 읽을 수 있는 형태의 가치들?

예를 들어 다음과 같이 동작합니다.

$ echo 1461624333 | jq 'todate'   
"2016-04-25T22:45:33Z"

단, 밀리초가 아니라 초 단위로 해야 합니다.

물론입니다. 입력한 내용은 유효한 JSON이 아닙니다.그러나 이러한 오브젝트의 말미에 있는 쉼표는 삭제되고 오브젝트는 JSON 문서의 루트 오브젝트인 배열로 래핑되어 있다고 가정합니다.

먼저 밀리초 단위의 UNIX 날짜를 jq의 날짜 함수가 기대하는 2차 정밀도로 변환하고 이를 사람이 읽을 수 있는 날짜로 변환할 수 있습니다.

.[].published_at |= (. / 1000 | strftime("%Y-%m-%d"))

그런 다음 날짜가 일치하는 요소만 선택합니다.

map(select(.published_at == $date))

마지막으로 다 같이 모여서$date명령줄에서 변수:

jq --arg date "2016-04-25" '.[].published_at |= (. / 1000 | strftime("%Y-%m-%d")) | map(select(.published_at == $date))' stuff.json

jq 1.5에는 온라인 설명서에 나와 있는 strftime과 같은 표준 시간 및 날짜 기능이 있습니다.단, 아래 그림과 같이 TZ에 대한 지원은 극히 제한적이거나 신뢰성이 떨어집니다.

$ echo $TZ

$ jq -n '123 | strftime("%B %d %Y %I:%M%p %Z")'
"January 01 1970 12:02AM EST"

TZ='Asia/Kolkata' jq -n '123 | strftime("%B %d %Y %I:%M%p %Z")'
"January 01 1970 12:02AM IST"

strfrflocal time

당신의 jq가strflocaltime:

TZ=Asia/Kolkata jq -n '123|strflocaltime("%Y-%m-%dT%H:%M:%S %Z")'
"1970-01-01T05:32:03 IST"

언급URL : https://stackoverflow.com/questions/36853202/jq-dates-and-unix-timestamps

반응형