date
명령 내에서 변수를 사용하고 싶습니다. 내 시스템은 GNU 날짜를 지원하지 않습니다. 저는 Sunos를 사용하고 있는데 date
with 옵션을 사용하면 잘못된 대체 항목으로 -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
이 입력과 같이 다른 파일에서 얻은 실제 데이터를 전달해야 하며 해당 날짜 이틀 전에 그러한 입력을 받아야 합니다..cnf
28OCT2018
2018-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