날짜 명령의 변수

날짜 명령의 변수

date명령 내에서 변수를 사용하고 싶습니다. 내 시스템은 GNU 날짜를 지원하지 않습니다. 저는 Sunos를 사용하고 있는데 datewith 옵션을 사용하면 잘못된 대체 항목으로 -d표시됩니다 .-d

#!/usr/bin/ksh
RELEASE_DATE="28 OCT 2018" 
RELEASE_DATE_MINUS_2=`date -"${RELEASE_DATE: -2} ${RELEASE_DATE:4:3} ${RELEASE_DATE:0:4} - 2 days" '+%Y-%m-%d'`
echo "Release is $RELEASE_DATE" 
echo "release_date-2 is $RELEASE_DATE_MINUS_2

위의 코드 조각을 사용해 보았습니다. release_date이 입력과 같이 다른 파일에서 얻은 실제 데이터를 전달해야 하며 해당 날짜 이틀 전에 그러한 입력을 받아야 합니다..cnf28OCT20182018-10-26

답변1

쉘 포함 zsh:

zmodload zsh/datetime
rel_date=2018OCT28
strftime -rs d %Y%b%d.%H $rel_date.12 &&
  strftime -s two_days_before %Y-%m-%d $((d - 86400*2)) || exit

echo $two_days_before

답변2

Perl은 다음과 같은 목적으로 사용될 수 있습니다.

perl -MTime::Piece -slE 'say +(Time::Piece->strptime($date, "%Y%b%d") - 2 * 86_400)->ymd' -- -date="$rel_date"

들어오는 날짜 변수의 형식을 지정하여 이를 시간 개체로 구문 분석하고 날짜 산술을 수행한 다음 원하는 YYYYY-mm-dd 형식으로 출력합니다.

여기에 녹음되었습니다:https://perldoc.perl.org/Time/Piece.html

답변3

쉘로 태그를 지정했으므로 변수가 쉘에 있어야 한다고 가정하지만 참고로 =쉘 변수 주위에는 공백이 있을 수 없습니다.

GNU는 date해당 형식의 입력 날짜를 허용하지 않지만 허용하므로 28 OCT 2018쉘 인수 확장을 사용하여 날짜를 다시 정렬할 수 있습니다(항상 동일한 형식인 한).

date -d "${rel_date: -2} ${rel_date:4:3} ${rel_date:0:4}"

이제 2일을 빼려면 다음을 추가하면 됩니다.

date -d "${rel_date: -2} ${rel_date:4:3} ${rel_date:0:4} - 2 days" 

요청한 형식으로 출력합니다.

date -d "${rel_date: -2} ${rel_date:4:3} ${rel_date:0:4} - 2 days" '+%Y-%m-%d'

답변4

어떤 ksh{88,93}를 사용하고 있는지 아는 것이 유용할 수 있습니다.

ksh93(1)에 따르면 날짜에 대한 일부 정보를 찾을 수 있습니다.

 printf format [ arg ... ]
 %(date-format)T

--실용적인 예

: printf "%(%d.%m,%Y)T\n"             
11.01,2019
: printf "%(%d.%m.%Y)T\n" "2 days ago"
09.01.2019

관련 정보