2016-09-15 3 views
0

mac osx bsd에서 date -vmon은 현재 날짜를 월요일 날짜로 변환하고 date +%w은 요일을 변환합니다.BSD에서 날짜 문자열을 날짜 객체로 변환합니다. MacOSX

말해 주겠습니까? mm/dd/yy 형식으로 입력 한 날짜가 9/14/16입니다. 이 문자열 패턴을 날짜 객체로 변환하면 -vmon+%w과 같은 날짜 기능을 수행 할 수 있습니다.

나는 다음을 시도 : startDate=$(date -jf "%m/%d/%y" "9/14/16") 그리고 $startDate +"%w"을 수행하려고 시도하지만 작동하지 않습니다. 나는 startDate가 날짜가 아니며 실제로 String이 아닌지 의심 스럽다.

어떻게 문자열을 날짜로 변환하여 날짜 조작을 수행 할 수 있습니까?

편집 :이 작업을 수행하기위한 요구 사항은 다음과 같습니다. 입력 한 날짜가 지정되었습니다. 그런 다음 해당 날짜에 해당하여 월요일의 날짜 및 금요일 날짜 인 일주일의 시작 및 종료 작업 날짜를 가져오고 싶습니다. 다음주 월요일의 날짜와 금요일 날짜를 얻고 싶습니다. 어떻게해야합니까?

+1

수 없습니다. 'date'에 의해 표준 출력에 쓰여지는 문자열 만있는 날짜 객체는 없습니다. – chepner

+0

감사합니다. @chepner. 방금 내 요구 사항을 자세히 설명하는 게시물을 편집했습니다. –

+0

bash보다 더 강력한 언어가 필요할 것입니다 (예 :'python'). 'awk' ('gawk')의 GNU 버전은 datetime 함수를 가지고 있습니다. 그러나 여러분이 필요로하는 일을하는 것이 까다로울 것이라고 생각합니다. – cdarke

답변

2

date 문자열 입력을 '획기적 시간'(일식 1970 년 01 월 00 일 00:00:00 +00 : 00 이후의 초 수)으로 변환하려면 두 번 사용해야합니다.

rdate="9/14/16" 
epoch_time=$(date -j -f '%m/%d/%y' "$rdate" +'%s') 
date -j -vmon -r "$epoch_time" 
date -j -vfri -r "$epoch_time" +'%w' 

나에게 출력했다 : 한 번 사용자가 선택한 출력 형식에 획기적인 시간을 변환하는 금요일 요일 5입니다

Mon Sep 12 10:14:44 PDT 2016 
5 

참고 때문에 출력이 올바른지 . %w을 지정할 때 -vdow은 약간의 문제가 있습니다. 출력은 5가 될 것입니다. 그러나 필요한 다른 형식의 문자도 사용할 수 있습니다.

시간 부분의 기본값은 현재 시간입니다. 당신은 자정에 등을 작동하도록 변환 형식 (-f 인수)로 변환 된 날짜와 %H:%M:%S00:00:00을 추가 할 수

는 한 명령 줄에 그것을 결합 할 수 있습니다

:

$ date -j -vmon -r $(date -j -f '%m/%d/%y %H:%M:%S' "$rdate 00:00:00" +'%s') +'%Y-%m-%d %H:%M:%S %w %s' 
2016-09-12 00:00:00 1 1473663600 
$ 

온 마지막 예 Mac OS X의 date에 대한 man 페이지는 %s 형식 지정자를 언급합니다. 이것은 형식 지정자를 작동시키는 열쇠입니다. 자, date을 두 번 사용합니다. 맨 페이지가 시놉시스를 제공

참고 : 사용법 메시지는 당신이 -f을 사용할 수 없다는 표시되지 않습니다

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
      [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] 

:

date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt] 
date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss] 
date [-jnu] -f input_fmt new_date [+output_fmt] 
date [-d dst] [-t minutes_west] 

'사용'메시지가 덜 유용 -r 또는 -v 인 반면, 매뉴얼은 분명하지 않지만 사용자는 할 수 없습니다.

테스트 됨 : Mac OS X 10.11.6 El Capitan

+1

사용법 메시지가 더 명확해질 수는 있지만,'date'를 호출하는 두 개의 중첩되지 않는 방법이 있음을 암시한다고 생각합니다 : 첫 번째 줄과 두 번째 줄. 두 번째 줄이 '날짜'로 시작하면 훨씬 더 명확 해 지므로 두 번째 줄과 첫 번째 줄의 연속을 혼동하는 것이 더 어려울 것입니다. – chepner

+0

@chepner : 아, ... 네. 명령 이름을 반복하면 명확하게 표시되지만 올바른 것입니다. –

+0

우수 답변. 자세한 설명을 해 주셔서 감사합니다. 네,'man date '의 마지막 예제는'% s'을 언급했습니다. 이 답변을 너무 늦게 받아 들여 사과드립니다. 나는 다른 작업으로 끌려 갔고 오늘까지이 작업을 시도 할 수 없었다. –

관련 문제