我是linux新手。如何在指定的日期範圍內打印和存儲日期。在日期範圍內打印日期linux
例如我有startdate = 2013-03-01和enddate = 2013-03-25;我想打印該範圍內的所有日期。
在此先感謝
我是linux新手。如何在指定的日期範圍內打印和存儲日期。在日期範圍內打印日期linux
例如我有startdate = 2013-03-01和enddate = 2013-03-25;我想打印該範圍內的所有日期。
在此先感謝
使用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 [email protected]$cur +%Y-%m-%d
let cur+=24*60*60
done
對日期參數的詳細信息,請參閱man date
..
由於只要日期爲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
隨着[ ... ]
,你需要躲避<
以避免與輸入重定向操作混亂。
如果它大於結束日期,則它具有打印開始日期的疣。
,如果你想「最近」日期,另一種是:
echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d"
顯然不會任意日期範圍工作。
這是我認爲最好的答案接近,我做了一個改變: $ startdate ='2016-03-01';回聲{0..10} | xargs -I {} -d''date --date =「$ startdate +」{}「days」+「%Y-%m-%d」 2016-03-01 2016-03-02 2016- 03-03 .... – user5672998 2018-01-11 18:37:15
另一種選擇是使用dateseq
從dateutils
(http://www.fresse.org/dateutils/#dateseq):
$ dateseq 2013-03-01 2013-03-25
2013-03-01
2013-03-02
2013-03-03
2013-03-04
2013-03-05
2013-03-06
2013-03-07
2013-03-08
2013-03-09
2013-03-10
2013-03-11
2013-03-12
2013-03-13
2013-03-14
2013-03-15
2013-03-16
2013-03-17
2013-03-18
2013-03-19
2013-03-20
2013-03-21
2013-03-22
2013-03-23
2013-03-24
2013-03-25
略微改進版
#!/bin/bash
startdate=2013-03-15
enddate=2013-04-14
curr="$startdate"
while true; do
[ "$curr" \< "$enddate" ] || { echo "$curr"; break; }
echo "$curr"
curr=$(date +%Y-%m-%d --date "$curr +1 day")
done
所以,只是做了'回聲 「$ CURR」'測試後;) 。 'date --date「$ curr +1 day」'比'let cur = ..好'' – 2013-03-25 20:06:19
可能最好把它放在for循環中而不是while循環中以保證安全。如果您在腳本中參數化startdate和enddate,則循環運行最大366次或1000次。這將防止它無限循環。 – ekangas 2013-09-04 19:56:00