全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

shell通过遍历输出两个日期范围内所有日期的方法

前言

在平常c/c++开发中经常遇到日期处理的情形,例如求两个给定的日期之间相差的天数或者需要使用map存储两个固定日期范围内的所有日期。前段时间项目中需要用shell脚本批量处理给定的两个日期范围内所有日期产生的日志,当时以为shell处理不方便就用c++来处理了。后面用shell实现了下,发现也挺简单的。

一、思路流程

      1、显然不能直接把这两个日期当作整数相减得到差值然后把初始日期不断累加1得到所有的日期,而且要考虑大小月的问题。

      2、为了以后开发的方便,需要把这个求两个固定上期范围内的所有日期功能封装在一个函数(即下面脚本中的genAlldate)中。

但是shell的function不能像C/C++那样能return一个数据类型,也没有引用或者指针的功能,所以在需要先声明一个数组变量DATE_ARRAY用于存放计算出来的所有日期,然后在函数遍历中直接写入每个日期数据。

      3、最后使用了3种方法来遍历输出数组DATE_ARRAY存放的所有日期。

      4、输出的日期格式尽量能够自定义,例如2017-03-30、2017.06.18和20170618等等。

二、shell程序

#!/bin/bash
# FileName: alldateduringtwodays1.sh
# Description: Print all the date during the two days you inpute.
# Simple Usage: ./alldateduringtwodays1.sh 2017-04-01 2017-06-14 or ./alldateduringtwodays1.sh 20170401 20170614 [-]
# (c) 2017.6.15 vfhky https://typecodes.com/linux/alldateduringtwodays1.html
# https://github.com/vfhky/shell-tools/blob/master/datehandle/alldateduringtwodays1.sh


if [[ $# -le 2 || $# -gt 3 ]]; then
 echo "Usage: $0 2017-04-01 2017-06-14 [-] or $0 20170401 20170614 [-] ."
 exit 1
fi

START_DAY=$(date -d "$1" +%s)
END_DAY=$(date -d "$2" +%s)
# The spliter bettwen year, month and day.
SPLITER=${3}


# Declare an array to store all the date during the two days you inpute.
declare -a DATE_ARRAY


function genAlldate
{
 if [[ $# -ne 3 ]]; then
 echo "Usage: genAlldate 2017-04-01 2017-06-14 [-] or genAlldate 20170401 20170614 [-] ."
 exit 1
 fi

 START_DAY_TMP=${1}
 END_DAY_TMP=${2}
 SPLITER_TMP=${3}
 I_DATE_ARRAY_INDX=0

 # while [[ "${START_DAY}" -le "${END_DAY}" ]]; do
 while (( "${START_DAY_TMP}" <= "${END_DAY_TMP}" )); do
 cur_day=$(date -d @${START_DAY_TMP} +"%Y${SPLITER_TMP}%m${SPLITER_TMP}%d")
 DATE_ARRAY[${I_DATE_ARRAY_INDX}]=${cur_day}

 # We should use START_DAY_TMP other ${START_DAY_TMP} here.
 START_DAY_TMP=$((${START_DAY_TMP}+86400))
 ((I_DATE_ARRAY_INDX++))

 #sleep 1
 done
}

# Call the funciotn to generate date during the two days you inpute.
genAlldate "${START_DAY}" "${END_DAY}" "${SPLITER}"


# [Method 1] Traverse the array.
echo -e "[Method 1] Traverse the array."
for SINGLE_DAY in ${DATE_ARRAY[@]};
do
 echo ${SINGLE_DAY}
done


# [Method 2] Traverse the array.
echo -e "\n[Method 2] Traverse the array."
for i in "${!DATE_ARRAY[@]}"; do 
 printf "%s\t%s\n" "$i" "${DATE_ARRAY[$i]}"
done


# [Method 3] Traverse the array.
echo -e "\n[Method 3] Traverse the array."
i=0
while [ $i -lt ${#DATE_ARRAY[@]} ]
do
 echo ${DATE_ARRAY[$i]}
 let i++
done

# If you do not need this array any more, you can unset it.
# unset DATE_ARRAY

exit 0

三、测试

该shell脚本支持的输入日期格式为2017-04-01和20170401这两种,输出的日期格式格式很灵活,只要在执行程序时再追加一个任意日期分隔符(例如常见的.、-等)即可,最后由脚本中的SPLITER变量做输出格式控制。

这里使用./alldateduringtwodays1.sh 2017-03-30 2017-04-02 .进行测试,效果如下图所示。

四、脚本管理

目前已经把这个脚本放在Github了,地址是https://github.com/vfhky/shell-tools(也可以通过本地下载),以后脚本的更新或者更多好用的脚本也都会加入到这个工程中。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# shell  # 遍历日期  # 日期范围  # 输出日期  # Shell脚本遍历一个日期范围实例  # perl与shell获取昨天、明天或多天前的日期的代码  # 获取两个日期间隔时间的shell脚本代码  # 遍历  # 放在  # 本地下载  # 这两个  # 可以通过  # 自定义  # 种方法  # 所示  # 这篇文章  # 就用  # 谢谢大家  # 好用  # 这两种  # 装在  # 前段时间  # 需要用  # 也挺  # 能像  # 如下图  # 时再 


相关文章: Bpmn 2.0的XML文件怎么画流程图  电商平台网站制作流程,电商网站如何制作?  C#如何在一个XML文件中查找并替换文本内容  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  如何续费美橙建站之星域名及服务?  常州自助建站费用包含哪些项目?  ppt制作免费网站有哪些,ppt模板免费下载网站?  免费视频制作网站,更新又快又好的免费电影网站?  魔方云NAT建站如何实现端口转发?  如何零成本快速生成个人自助网站?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  PHP 500报错的快速解决方法  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  建站主机选哪种环境更利于SEO优化?  济南专业网站制作公司,济南信息工程学校怎么样?  如何用免费手机建站系统零基础打造专业网站?  金*站制作公司有哪些,金华教育集团官网?  如何配置WinSCP新建站点的密钥验证步骤?  存储型VPS适合搭建中小型网站吗?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  黑客如何利用漏洞与弱口令入侵网站服务器?  北京企业网站设计制作公司,北京铁路集团官方网站?  如何在云服务器上快速搭建个人网站?  如何选择高效可靠的多用户建站源码资源?  移民网站制作流程,怎么看加拿大移民官网?  家庭建站与云服务器建站,如何选择更优?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  C++中引用和指针有什么区别?(代码说明)  建站主机选择指南:服务器配置与SEO优化实战技巧  建站之星各版本价格是多少?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  高端企业智能建站程序:SEO优化与响应式模板定制开发  教程网站设计制作软件,怎么创建自己的一个网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  如何快速搭建支持数据库操作的智能建站平台?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  想学网站制作怎么学,建立一个网站要花费多少?  如何在搬瓦工VPS快速搭建网站?  Android滚轮选择时间控件使用详解  网站制作报价单模板图片,小松挖机官方网站报价?  淘宝制作网站有哪些,淘宝网官网主页?  如何选择高效稳定的ISP建站解决方案?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何在万网ECS上快速搭建专属网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。