首页 > 解决方案 > 当日期是变量时如何在linux shell中增加日期

问题描述

我需要将日期变量增加 15 分钟。此脚本递增当前日期

#!/bin/bash
for i in {0,15,30,45}
do
  date --date='+'$i' minutes' +"%Y%m%d%H%M%S"
  echo "$date"
done

但我需要将初始日期设置为一年前,并在一年内不断增加。是否可以创建一个日期时间变量并在循环中不断添加分钟?

我需要这个来下载名为 20190101231500.csv 的文件,并且每个下一个文件名都有 15 分钟后的时间戳。

谢谢!

标签: shelldate

解决方案


用于date --date计算大量日期会变得非常慢。

# With date calculations (too) slow, only done for 10 days
d="2015-01-01"
((maxminutes=24*60))
while [ "$d" != "2015-01-10" ]; do
  d=$(date -I -d "$d + 1 day")
  for ((m=0; m<${maxminutes};m+=15)); do
     date -d "${d} + ${m} minutes" +"%Y%m%d%H%M"
  done
done 

另一种方法是使用 awk,以防止经常调用另一个程序

awk -v startdate="2015-01-01" -v enddate="2015-01-10" 'BEGIN {
         printf("%s %s\n", startdate, enddate);
      split(startdate,A,"[-]");
      T1=mktime(A[1] " " A[2] " " A[3] " 0 0 0");
      split(enddate,B,"[-]");
      T2=mktime(B[1] " " B[2] " " B[3] " 23 59 59");
      while (T1 < T2) {
         printf("%s\n", strftime("%Y-%m-%d %H:%M",T1));
         T1+=60*15;
      }
   }'

推荐阅读