현재까지 입력 형식을 어떻게 지정합니까?


19

에서 인식 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입력을 올바른 형식의 날짜 문자열로 변환하는 데 사용 하는 것보다 이것을 해결하는 더 우아한 방법이 있습니까?


답변:


10

POSIX 나 GNU 날짜는 없습니다 --magic-option. FreeBSD는 -f( date제안하는 것이 아닌의 출력 형식 지정자 와 유사한 구문으로) 호출합니다 .

귀하의 날짜는 GNU 날짜에 의해 인식되는 데 매우 가깝습니다. 날짜와 시간을 공백으로 구분하는 콜론을 대체하기 만하면됩니다.

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

1
맞춤 형식으로? 갈 수있는 유일한 방법은 정규식입니까? 이것은 끔찍하다 :-(
phil294

1
형식에 대해 알지 못하면 날짜를 파싱 할 수 없으며 고전적인 예는 01/02/03입니다.
Gilles 'SO- 악마 그만해

5

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

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

하지만 dconv직접 지원하지 않습니다 date(그렇지 협의하지의 출력 형식을 TZ또는 환경에서 아무것도), 도구 거기 strptimedateutils 지지 않습니다 %Z형식 지정자.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.