2017-03-08T19:41:26Z의 날짜를 구문 분석하는 방법은 무엇입니까?

2017-03-08T19:41:26Z의 날짜를 구문 분석하는 방법은 무엇입니까?

날짜를 파싱하려고합니다 2017-03-08T19:41:26Z.

원하는 출력은 2017-03-08입니다.

답변1

POSIX 쉘을 사용하여 이전 부분을 추출하려면 다음을 수행하십시오 T.

time=2017-03-08T19:41:26Z
utc_date=${time%T*} # as already said

또는 Bourne 또는 비 POSIX 쉘과 호환됩니다.

expr "$time" : '\(.*\)T'

2017-03-08T19:41:26Z자, 이건 참고하세요.줄루어 시간(UTC의 또 다른 이름), 정확한 순간의 명확한 사양입니다.

당시 런던의 날짜는 2017-03-08이었는데, 방콕의 날짜는 2017-03-09(새벽)이었습니다.

알고 싶다면현지의시간 지정 날짜(UTC 날짜 아님), 즉 방콕 사용자는 2017-03-09를, 런던 사용자는 2017-03-08을 얻습니다. 몇 가지 옵션이 있습니다.

GNU 사용 date:

time=2017-03-08T19:41:26Z

date -d "$time" +%F

(GNU 날짜는 zulu 형식을 인식할 수 있으므로 매우 간단합니다.)

ksh93같은

printf '%(%F)T\n' "$time"

내장 된 zsh기능:

zmodload zsh/datetime
TZ=UTC0 strftime -rs unix_time %Y-%m-%dT%TZ $time &&
strftime %Y-%m-%d $unix_time

(이를 지원하는 시스템(예: GNU 시스템)에서 이를 대체할 수 있습니다 %Y-%m-%d).%Fstrftime()strptime()

비슷하다 busybox date:

unix_time=$(date -u -D %Y-%m-%dT%TZ -d "$time" +%s)
date -d "@$unix_time" +%Y-%m-%d

답변2

사용 cut:

cut - 파일의 각 줄에서 부분을 제거합니다.

-d, --delimiter=DELIM 필드 구분 기호로 TAB 대신 DELIM을 사용합니다.

-f, --fields=LIST 이 필드만 선택합니다. -s 옵션이 지정되지 않은 경우 구분 기호가 포함되지 않은 모든 줄도 인쇄합니다.

echo "2017-03-08T19:41:26Z" | cut -d T -f 1

답변3

Bash에서는 할 수 있습니다매개변수 확장변하기 쉬운:

timestamp='2017-03-08T19:41:26Z'
date=${timestamp:0:10}          # pick 10 characters starting at position 0
date=${timestamp%T*}            # remove everything starting at the 'T'

( ${variable%pattern}실제로 표준 쉘 언어의 일부이며 와 같은 간단한 쉘에서도 지원됩니다 dash.)

물론 이는 단순한 하위 문자열 연산일 뿐입니다. 정말로 원한다면분석하다그 날짜가 오면 다른 일을 해야 합니다. 물론 형식이 고정 너비이므로 부분 문자열 확장이 이에 적합합니다. 하지만 값이 유효한지 등을 확인하고 싶을 수도 있습니다.

답변4

그렇다면 모든 숫자-대시-숫자-대시-숫자를 찾는 것만으로도 충분합니까? 이는 날짜 뒤에 "T"가 없어도 긴 문자열/줄에 적용됩니다.

grep -o "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"

또는 동등하지만 중괄호 "반복/여러 번"을 사용하면 약간 더 짧습니다.

grep -o '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}'

전임자:

$ echo 2017-03-08T19:41:26Z | grep -o '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}'
2017-03-08

입력에 다른 대시가 많지 않은 경우 4자, 대시, 2자, 대시, 2자 이상을 검색할 수 있습니다.

$ echo 2017-03-08T19:41:26Z | grep -o '....-..-..'
2017-03-08

관련 정보