지금까지 입력 형식을 지정하는 방법은 무엇입니까?

지금까지 입력 형식을 지정하는 방법은 무엇입니까?

인식할 수 없는 형식의 날짜와 시간이 주어지면 해당 날짜와 시간을 date어떻게 인식할 수 있나요 ?date

예를 들어:

$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

존재 합니까 --magic-option? 그렇지 않다면 sed입력을 올바른 형식의 날짜 문자열로 변환하는 것보다 이 문제를 해결하는 더 우아한 방법이 있습니까 ?

답변1

POSIX나 GNU Date --magic-optionFreeBSD는 이를 호출하지 않습니다( 제안한 구문이 아닌 출력 형식 지정자와 -f유사한 구문으로 ).date

귀하의 날짜가 GNU Date에서 인식되는 데 매우 가깝습니다. 해야 할 일은 날짜와 시간을 구분하는 콜론을 공백으로 바꾸는 것뿐입니다.

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

답변2

나는 많은 도구를 작성했습니다 (날짜 도구) 날짜와 시간을 보다 스크립트 친화적인 방식으로 처리합니다. 귀하의 마법 옵션은 --input-format|-i다음과 같습니다.

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

dconv출력 형식은 직접 지원되지 않지만 ( 환경에서 아무것도 date부여하지 않음 ) 도구 가 있습니다.TZstrptime날짜 도구형식 지정자를 지원합니다 %Z.

답변3

이미 설치된 Ubuntu와 같은 환경을 사용하는 경우 다음과 같이 busybox수행할 수 있습니다 .busybox date -D "$input_format" -d "$input"

$ busybox date -D "%m/%d/%Y %H:%M:%S" -d "02/27/2013 23:48:00"
Wed Feb 27 23:48:00 CST 2013

출력 문자열의 형식을 다음과 같이 지정하려는 경우뭔가 비표준적인 것busybox date -D "$input_format" -d "$input" +"$output_format"예를 들어 다음을 사용하여 출력 형식을 지정할 수 있습니다 .

$ busybox date -D "%m/%d/%Y" -d "02/27/2013" +"%d.%-m.%y"
27.2.13

그러나 ISO-8601 호환 날짜의 경우 -I원하는 정밀도 수준을 사용하십시오. 예를 들면 다음과 같습니다.

$ busybox date -D "%m/%d/%Y %H:%M:%S" -d "02/27/2013 23:48:00" -Iseconds
2013-02-27T23:48:00-0600

노트

이것비지박스 매뉴얼 페이지. 이것작동하지 않을 수 있습니다%Z시간대 형식이 있습니다 .

관련 정보