博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本日期函数
阅读量:5079 次
发布时间:2019-06-12

本文共 5315 字,大约阅读时间需要 17 分钟。

主要记录shell下关于时间和日期的函数总结。

shell下获取系统时间的方法直接调用系统变量

usage : date [OPTION][+FORMAT]

获取今天日期 :
date "+%Y%m%s"
date "+%F"
date -d "-1 day" "+%F"

选项

-d 显示时间有字符串描述

时间域

%H 小时(00..23)
%I 小时(00..12)
%k 小时(0..23)
%M 分钟(00..59)
%S 秒(00..60)
%Y 年(四位数)
%y 年(两位数)
%m 月(01..12)
%d 天(00..31)

%F 日期格式%Y-%m-%d

%D 日期格式%m/%d/%y
%r 时间格式hh:mm:ss AM或PM(12小时制)

%s 从1970年1月1号零点到目前经历的秒数

还有其他可借助date --help来查看

注意:只有root用户才有权限使用date命令设置时间,一般用户只能使用date命令显示时间

时间函数

############################################## Filename:dateutils.sh# Revision:1.1# Date:2018/12/17# Author:  chenchunping# Description: 日期函数# Notes:# 1. get_date 返回当前日期,格式YYYYMMDD# 2. check_date 检查日期,参数格式YYYYMMDD# 3. get_before_date 返回昨天时间# 4. get_next_date 返回明天时间# 5. get_beforemonth_date 返回N月以前的时间# 6. get_nextmonth_date 返回N月以后的时间# 7. get_beforeyear_date 返回N年以前的时间# 8. get_nextyear_date 返回N年以后的时间# 9. get_beforeday_date 返回N天以前的时间# 9. get_nextday_date 返回N天以后的时间# 10. get_diffdays 返回两个日期的天数# 11. check_leap 判断是否是闰年# 12. get_month_begin_date 返回1号日期# 13. get_month_days 返回月份的天数# 14. get_month_end_date 返回月末日期# 15. get_lastmonth_end_date 返回上一个月末日期##############################################获取当前日期,返回格式YYYYMMDDfunction get_date(){    currdate=`date "+%Y%m%d"`    echo $currdate}#检查日期格式(YYYYMMDD)function check_date(){    [ $# -ne 1 ] &&echo 1 &&exit 1    lenstr=`expr length "$1"`    [ $lenstr -ne 8 ] &&echo 1 &&exit 1    tmpstr=`echo "$1" | grep "^[^0][0-9]*$"`    year=`expr substr $1 1 4`    month=`expr substr $1 5 2`    day=`expr substr $1 7 2`    [ $month -lt 1 -o $month -gt 12 ] &&echo 1 &&exit 1    days=`get_month_days $1`    [ $day -lt 1 -o $day -gt $days ] &&echo 1 &&exit 1    echo 0}#计算指定日期前一天function get_before_date(){    if [ $# -eq 1 ];then        sec=`date -d $1 "+%s"`        sec_before_day=$(( sec - 24 * 60 * 60))        days_before=`date -d @$sec_before_day +%Y%m%d`        echo $days_before     else         days_before=`date -d -1days "+%Y%m%d"`        echo $days_before    fi}#计算指定日期第二天function get_next_date(){    if [ $# -eq 1 ];then        sec=`date -d $1 "+%s"`        sec_next_day=$(( sec + 24 * 60 * 60))        days_next=`date -d @$sec_next_day +%Y%m%d`        echo $days_next    else        days_next=`date -d +1days "+%Y%m%d"`        echo $days_next    fi    }#参数为2个:计算指定日期n个月以前的日期,参数为1个:当前日期n个月以前的日期function get_beforemonth_date(){    if [ $# -eq 2 ];then        beforemonth=`date -d "$1 -$2 month" "+%Y%m%d"`        echo $beforemonth    else        beforemonth=`date -d "-$1 month" "+%Y%m%d"`        echo $beforemonth    fi    }#参数为2个:计算指定日期n个月以后的日期,参数为1个:计算当前日期n个月以后的日期function get_nextmonth_date(){    if [ $# -eq 2 ];then        nextmonth=`date -d "$1 -$2 month" "+%Y%m%d"`        echo $nextmonth    else        nextmonth=`date -d "+$1 month" "+%Y%m%d"`        echo $nextmonth    fi}#参数为2个:计算指定日期n个年以前的日期,参数为1个:计算当前日期n个年以前的日期function get_beforeyear_date(){    if [ $# -eq 2 ];then        beforemonth=`date -d "$1 -$2 year" "+%Y%m%d"`        echo $beforemonth    else        beforemonth=`date -d "-$1 year" "+%Y%m%d"`        echo $beforemonth    fi    }#参数为2个:计算指定日期n个年以后的日期,参数为1个:计算当前日期n个年以后的日期function get_nextyear_date(){    if [ $# -eq 2 ];then        nextmonth=`date -d "$1 -$2 year" "+%Y%m%d"`        echo $nextmonth    else        nextmonth=`date -d "+$1 year" "+%Y%m%d"`        echo $nextmonth    fi}

#参数为2个:计算指定日期n天以前的日期,参数为1个:计算当前日期n天以前的日期function get_beforeday_date(){    if [ $# -eq 2 ];then        days_before=`date -d "$1 -$2 day" "+%Y%m%d"`        echo $days_before     else         days_before=`date -d "-$1 day" "+%Y%m%d"`        echo $days_before    fi}#参数为2个:计算指定日期n天以后的日期,参数为1个:计算当前日期n天以后的日期function get_nextday_date(){    if [ $# -eq 2 ];then        days_next=`date -d "$1 +$2 day" "+%Y%m%d"`        echo $days_next    else        days_next=`date -d "+$1 day" "+%Y%m%d"`        echo $days_next    fi    }#计算两个日期的间隔天数function get_diffdays(){    startdate_sec=`date -d $1 "+%s"`    enddate_sec=`date -d $2 "+%s"`    diff_sec=$((enddate_sec - startdate_sec))    diff_days=$((diff_sec / 86400))    echo $diff_days}#判断是否闰年(时间格式YYYYMMDD)function check_leap(){    year=`expr substr $1 1 4`    r1=$(( year % 4 ))    r2=$(( year % 100 ))    r3=$(( year % 400 ))    if [ $r1 -eq 0 -a $r2 -ne 0 -a $r3 -eq 0 ];then        fren="true"    else        fren="false"    fi    echo $fren}

#获取指定日期的当月1号function get_month_begin_date(){    begin_date=`date -d "$1" "+%Y%m01"`    echo $begin_date}#获取指定日期当月的天数function get_month_days(){    currdate=`date -d "$1" "+%Y%m%d"`    year=`expr substr $currdate 1 4`    month=`expr substr $currdate 5 2`    case $month in        01|03|05|07|08|10|12) days=31;;        04|06|09|11) days=30;;        02)        leap_year=`check_leap $currdate`        if [ "$leap_year" = "true" ];then            days=29        else            days=28        fi        ;;        *)        days=0        ;;    esac    echo $days}#指定日期所在月份最后日期function get_month_end_date(){    date=`date -d "$1" "+%Y%m%d"`    year=`expr substr $date 1 4`    month=`expr substr $date 5 2`    days=`get_month_days $1`    end_date=$(( $(( $(( year * 10000 )) + $(( month * 100 )))) + days ))    echo $end_date}#指定日期的上一个月最后日期function get_lastmonth_end_date(){    begin_date=`date -d "$1" "+%Y%m01"`    lastmonth_end_date=`date -d "$begin_date -1 day" "+%Y%m%d"`     echo $lastmonth_end_date}

转载于:https://www.cnblogs.com/onefish/p/10181517.html

你可能感兴趣的文章
关于TFS2010使用常见问题
查看>>
软件工程团队作业3
查看>>
python标准库——queue模块 的queue类(单向队列)
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
nodejs fs路径
查看>>
动态规划算法之最大子段和
查看>>
linux c:关联变量的双for循环
查看>>
深入浅出理解zend framework(三)
查看>>
python语句----->if语句,while语句,for循环
查看>>
javascript之数组操作
查看>>
LinkedList源码分析
查看>>
TF-IDF原理
查看>>
用JS制作博客页面背景随滚动渐变的效果
查看>>
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>