以特定格式打印特定日期

以特定格式打印特定日期

我想编写一个 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. 我会抓住你的日期1和日期2并将它们转换为时间戳
  2. 然后我会调查:1 小时转换为时间戳是多少。
  3. 并编写一个从时间戳(日期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 打印出了您描述的那个列表。所以,它完成了。我认为一些破解程序会做得更短/更好,但它确实有效......

祝你好运

相关内容