저는 Sun OS에서 작업하고 있으며 스크립트가 파일(%Y%m%d 형식)에서 날짜를 읽고 해당 날짜에 1일을 추가하도록 하려고 합니다.

저는 Sun OS에서 작업하고 있으며 스크립트가 파일(%Y%m%d 형식)에서 날짜를 읽고 해당 날짜에 1일을 추가하도록 하려고 합니다.

저는 Sun OS 환경에서 작업하고 있으며 파일(%Y%m%d 형식)에서 날짜를 읽고 1일을 추가하고 다시 쓸 수 있는 기능을 기존 unix ksh 스크립트에 추가하고 싶습니다. 파일 안의 파일. [참고: 현재 날짜에 날짜를 추가하는 대신 파일에 존재하는 i/p 날짜에 1일을 추가하고 싶습니다.] 예: DateFile.dat 20200620 스크립트 실행이 끝나면 스크립트를 20200621로 변경하고 싶습니다. 그러나 i/p 날짜가 포함된 변수에 1일을 추가하는 동안 오류가 발생합니다.

#!/bin/ksh
ip_dte</home/{file_Path}
echo $ip_dte
dte_add=`TZ=AEST-24 "$ip_dte"`
echo $dte_add

답변1

펄 사용:

perl -MPOSIX=strftime  -MTime::Local -lne '
    /^(\d{4})(\d{2})(\d{2})$/ or die "Cannot parse time: $_\n";
    ($year, $month, $day) = ($1, $2, $3);
    $time = timelocal 0, 0, 12, $day, $month-1, $year-1900;
    $time += 86400;  # add one day
    print strftime("%Y%m%d", localtime $time);
' datefile

설치된 Perl 버전이 5.10 이상인 경우 다음을 수행할 수 있습니다.

perl -MTime::Piece -MTime::Seconds -lne '
    $fmt = "%Y%m%d";
    $time = Time::Piece->strptime($_, $fmt) or die "Cannot parse time: $_\n";
    $time += ONE_DAY;
    print $time->strftime($fmt);
' datefile

답변2

cal달력 도구를 사용하면 내일 날짜를 쉽게 계산할 수 있습니다. 함수이지만 bash다시 작성하는 것은 어렵지 않습니다

tomorrow() {
    local y=$1 m=${2#0} d=${3#0}

    ((++d))
    if cal $m $y | xargs | sed -e 's/$/ X/' -e 's/   */ /g' | grep -v " ${d#0} " >/dev/null
    then
        d=1
        [[ $((++m)) -gt 12 ]] && m=1 && ((++y))
    fi
    printf "%d %d %d\n" $y ${m#0} ${d#0}
}

이를 이용하면 내일 날짜를 쉽게 알 수 있습니다

# Get today's date into $y $m $d
IFS='-' read -r y m d <<<"2020-06-29"; echo y=$y m=${m#0} d=${d#0}
y=2020 m=6 d=29

tomorrow $y $m $d
2020 6 30

임의의 날짜를 사용하는 다른 예

tomorrow 2020 6 30
2020 7 1

tomorrow 2020 2 28
2020 2 29

tomorrow 2019 2 28
2019 3 1

보조기능입니다

yesterday() {
    local y=$1 m=${2#0} d=${3#0}

    if [[ $((--d)) -eq 0 ]]
    then
        # Go back one month and find the last day
        [[ $((--m)) -eq 0 ]] && ((--y)) && m=12
        d=$(cal ${m#0} $y | xargs | awk '{print $NF}')
    fi
    printf "%d %d %d\n" $y ${m#0} ${d#0}
}

답변3

이와 같은 것을 사용하면 새로운 시간대의 이름과 시간대 오프셋 TZ=XXX-24으로 사용됩니다 .XXXGMT+24

유럽 ​​서머타임(European Summer Time)과 같이 원하는 시간을 얻으려면 MET-26유럽 겨울 시간(European Winter Time)을 지정해야 합니다 MET-25.

관련 정보