shell脚本日期函数

主要记录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 返回上一个月末日期
#############################################

#获取当前日期,返回格式YYYYMMDD
function 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值