$date1이 쉘에서 $date2 이전인지 확인하는 방법은 무엇입니까?

$date1이 쉘에서 $date2 이전인지 확인하는 방법은 무엇입니까?
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

관련 정보