我想编写一个 bash 脚本,以以下格式打印出日期:
20120205_16
(year)(month)(day)_(24 hour)
因此,针对当前日期执行此操作的命令是:
date +'20%y%m%d_%H'
我想要做的是像这样打印从指定日期到另一日期的每个日期(使用 for 循环或其他方法)。例如:
20120205_16 -> 20120305_18 would be:
20120205_16
20120205_17
20120205_18
...
20120305_17
20120305_18
是否可以使用日期或其他方法轻松做到这一点?
答案1
打印时间段内的每个日期
- 我会抓住你的日期1和日期2并将它们转换为时间戳
- 然后我会调查:1 小时转换为时间戳是多少。
- 并编写一个从时间戳(日期1)到时间戳(日期2)的 for 循环
在循环中,我将逐步添加时间戳(1 小时),将新时间戳转换回首选的日期/时间格式并将其打印出来,直到循环结束。#
#!/bin/bash
# by user85321 @ ask ubuntu
# call: ./script.sh 20120205_16 20120205_16 20120305_18
# STEP 1:
# set userdefined Dateformat to normal
d1=$(echo "$1" | sed 's/_/ /g')
d2=$(echo "$2" | sed 's/_/ /g')
# set normalized dates to timestamps
t1=$(date --utc --date "$d1" +%s)
t2=$(date --utc --date "$d2" +%s)
# STEP 2:
# time increment, 1h = 3600 s
h=3600
# STEP 3:
if [ $t2 -gt $t1 ]
then
for i in $(seq $t1 $h $(($t2-$h)))
do
# take this and do what you want to do ;o)
echo $(date --date="@$i" "+%Y%m%d_%H")
done
fi
我的 bash 打印出了您描述的那个列表。所以,它完成了。我认为一些破解程序会做得更短/更好,但它确实有效......
祝你好运