Korn Shell递增日期,格式为YYYYMMDD

我需要使用特定格式YYYYMMDD递增日期(例如:20190401或20190523)。几天和一个月的数字都必须为0。

我希望输入cmd行args ex ./script.ksh(要增加的天数)(开始日期)或./script.ksh(开始日期)(结束日期)

我制作了一个可怕的版本,其中包含./script.ksh(天数)(年)(年)(月)(天),例如:./script.ksh 7 2019 04 10

#The amount of days to load by
Days=$1

Year=$2
Month=$3
Day=$4

count=0

while (($count < $Days)) 
do
    #The date of the file in format: YYYYMMDD
    if [[ $Day -eq "1" || $Day -eq "2" || $Day -eq "3" || $Day -eq "4" || $Day -eq "5" || $Day -eq "6" || $Day -eq "7" || $Day -eq "8" || $Day -eq "9" ]];
    then
        Day=0$Day
    fi

    Date=$Year$Month$Day
    print $Date

    #Check if month then day and increment accordingly

    #months with 31 days
    if [[ ($Month -eq "01" || $Month -eq "03" || $Month -eq "05" || $Month -eq "07" || $Month -eq "08" || $Month -eq "10" || $Month -eq "12") && ($Day == 31)]];
        then
                #If Dec,31 XXXX
                if [[ $Month -eq "12" && Day == 31 ]];
                then
                        Month=01
                        Day=01
                        Year=$Year+1
                fi
                if((Day == 31));
                then
                        Month=$Month+1
                        Day=1
                fi
        #Months with 30 days
        elif [[ ($Month -eq "04" || $Month -eq "06" || $Month -eq "09" || $Month -eq "11") && ($Day == 30) ]];
        then
                if(($Day == 30));
                then
                        $Month=$Month+1
                        Day=01
                fi
        #The tricky February leap year
        elif [[ ($Month -eq "02") && ($Day == 28 || $Day == 29) ]];
        then
                leapcheck=$(($Year % 4))
                if(( leapcheck == 0 && Day == 29 ));
                then
                        Month=$Month+1
                        Day=01

                elif(( $leapcheck != 0  && $Day == 28 ));
                then
                        Month=$Month+1
                        Day=01
                fi
        else
                (( Day=$Day+1 ))
        fi

        ((count=$count+1))
done

,它将打印20190410到20190416。但是,存在月份和天数递增的问题,其中0被删除,而我的月份根本不递增。我相信肯定有比我的尝试更简单,更好的方法。我是korn shell脚本的新手。

zhchea 回答:Korn Shell递增日期,格式为YYYYMMDD

如果您有date(带有std::vector::resize选项),一种简单的方法是将日期转换为自纪元以来的秒数,添加以秒为单位的天数,然后进行转换回到您想要的格式:

-d

days=5 now=20190401 now_sec=$(date -d "${now:0:4}-${now:4:2}-${now:6:2} 11:00:00" +%s) then_sec=$((now_sec + days * 3600 * 24)) then=$(date -d @"$then_sec" +%Y%m%d) echo "$then" # will output 20190406 提取字符串的一部分,请参见parameter expansions

本文链接:https://www.f2er.com/2802041.html

大家都在问