date1=$1
date2=$2
$date1
이전인지 확인하는 방법은 무엇입니까 $date2
?
두 날짜의 형식은 DD/MM/YY
모두 입니다 01/01/15
.
답변1
뻔뻔하게 말하고 싶다면 언제든지 UTC epoch 1970-01-01 00:00:00을 기준으로 날짜를 변환할 수 있습니다.
#added to fix DD/MM/YY format
input1=`echo $1 | awk -F "/" '{print $2"/"$1"/"$3}'`
input2=`echo $2 | awk -F "/" '{print $2"/"$1"/"$3}'`
date1=`date +%s --date="$input1"`
date2=`date +%s --date="$input2"`
if [[ "$date1" -lt "$date2" ]]; then
echo "$1 earlier than $2"
else
echo "$1 not earlier than $2"
fi
답변2
다시 정렬해야 하므로 필드로 분할하여 시작하세요. YYMMDD 또는 YYYYMMDD는 전체 문자열을 한 번에 보기 때문에 이러한 종류의 비교 작업에 훨씬 더 좋습니다.
IFS="/" date1a=($date1) date2a=($date2)
그런 다음 1999년 이전 연도를 처리해야 하는 경우 두 자리 연도를 네 자리로 수정합니다. 그렇지 않으면 99가 01보다 큽니다.
((date1a[2] += (date1a[2] < 70 ? 2000 : 1900)))
((date2a[2] += (date2a[2] < 70 ? 2000 : 1900)))
그런 다음 YYYYMMDD 순서로 다시 정리합니다.
date1b="${date1a[2]}${date1a[1]}${date1a[0]}"
date2b="${date2a[2]}${date2a[1]}${date2a[0]}"
이제 비교할 수 있습니다:
if (( $date1b < $date2b )); then
echo "earlier"
else
echo "later"
fi
참고: 이는 bash 관련 답변이며 POSIX에 지정되지 않은 bash(및 ksh) 특정 기능에 따라 다르므로 /bin/sh
일부 시스템에서는 기본 셸에서 작동하지 않을 수 있습니다.
POSIX에는 다른 접근 방식이 필요합니다. awk
무거운 작업을 안전하게 수행할 수 있습니다.
awkscr='BEGIN {FS="/"}; {print $3+($3<70?2000:1900) $2 $1}'
date1b=$(echo "$date1" | awk "$awkscr")
date2b=$(echo "$date2" | awk "$awkscr")
if [ "$date1b" -lt "$date2b" ]; then
echo "earlier"
else
echo "later"
fi