13

私はLinuxが初めてです。特定の日付範囲で日付を印刷して保存するにはどうすればよいですか。

たとえば、 startdate=2013-03-01 と enddate = 2013-03-25 があります。その範囲内のすべての日付を印刷したい。

前もって感謝します

4

7 に答える 7

17

日付が YYYY-MM-DD 形式である限り、それらを辞書式に比較し、date最初に秒に変換せずにカレンダー計算を行うことができます。

startdate=2013-03-15
enddate=2013-04-14

curr="$startdate"
while true; do
    echo "$curr"
    [ "$curr" \< "$enddate" ] || break
    curr=$( date +%Y-%m-%d --date "$curr +1 day" )
done

では、入力リダイレクト演算子との混乱を避けるため[ ... ]に をエスケープする必要があります。<

これには、開始日が終了日よりも大きい場合、開始日を印刷するという疣贅があります。

于 2013-03-25T19:04:32.880 に答える
8

「最近」の日付が必要な場合の代替手段は次のとおりです。

echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d"

明らかに、任意の日付範囲では機能しません。

于 2015-09-22T07:37:36.670 に答える
3

date日付を秒に変換し、少し計算して元に戻すために使用します。

#/bin/bash

dstart=2013-03-01
dend=2013-03-25
# convert in seconds sinch the epoch:
start=$(date -d$dstart +%s)
end=$(date -d$dend +%s)
cur=$start

while [ $cur -le $end ]; do
    # convert seconds to date:
    date -d@$cur +%Y-%m-%d
    let cur+=24*60*60
done

man date日付パラメーターの詳細については、を参照してください。

于 2013-03-25T18:08:53.940 に答える