• Shell date 命令详解


      格式: date [选项] ... [+格式]

    选项说明:

      -d ,--date=字符串   显示指定字符串所描述的时间

    格式说明:

    例子1:

    #!/bin/bash
    
    ##1. 获取当前系统时间 YYYY-MM-DD HH:MM:SS
    v_time_eq=`date "+%F %T"`
    v_time=`date "+%Y-%m-%d %H:%M:%S"`
    
            echo -e "系统当前时间v_time: ${v_time}, v_time_eq: ${v_time_eq} 	v_time 等价于 v_time_eq, 但是v_time 的格式,可读性更强,建议使用。"
    ##2. 获取指定格式的日期 YYYY-MM-DD, YYYYMMDD, YYYY/MM/DD
    v_date=`date -d "$v_time" +%Y%m%d`
    v_date_dir=`date -d "$v_time" +%Y/%m/%d`
    v_date_hor=`date -d "$v_time" +%Y-%m-%d`
    
            echo "系统当前日期v_date: ${v_date}, v_date_dir: ${v_date_dir}, v_date_hor: ${v_date_hor}。感受下不同的格式。"
    ##3.获取前一天、后一天的日期 YYYYMMDD
    v_date_ago_1=`date -d "$v_date -1 day" +%Y%m%d`
    v_date_future_1=`date -d "$v_date 1 day" +%Y%m%d`
    
            echo "前一天v_date_ago_1: ${v_date_ago_1}, 后一天v_date_future_1: ${v_date_future_1}"
    ##4.获取前一个月、后一个月的日期 YYYYMMDD
    v_date_ago_1month=`date -d "$v_date -1 month" +%Y%m%d`     #遇到2月闰月的时候,会有问题,比如20170329,前一个月会变成20170301
    v_date_ago_1month_leap=`date -d "20170329 -1 month" +%Y%m%d`
    v_date_future_1month=`date -d "$v_date 1 month" +%Y%m%d`
    
            echo "前一个月日期v_date_ago_1month: ${v_date_ago_1month}, 后一个月日期v_date_future_1month: ${v_date_future_1month}"
            echo "闰2月的时候,会有问题,比如20170329 的前一个月返回的是: ${v_date_ago_1month_leap}, 并不是20170228"
    ##5.获取前一年、后一年的日期 YYYYMMDD
    v_date_ago_1year=`date -d "$v_date -1 year" +%Y%m%d`
    v_date_future_1year=`date -d "$v_date 1 year" +%Y%m%d`
    
            echo "前一年的日期v_date_ago_1year:${v_date_ago_1year}, 后一年的日期v_date_future_1year: ${v_date_future_1year}"
    ##6.获取系统当前月份 月初日期 YYYYMMDD
    v_month=`date -d "$v_date" +%Y%m`01
    v_month_ago_1=`date -d "$v_month -1 month" +%Y%m`01
    v_month_future_1=`date -d "$v_month 1 month" +%Y%m`01
    
            echo "系统当前月份月初日期v_month:${v_month},上个月月初日期v_month_ago_1:${v_month_ago_1}, 下个月月初日期v_month_future_1:${v_month_future_1}"
    View Code

    结果截图:

    例子2: 对于单独使用小时、分钟时,会有08,09这样的出现,需要转换成10进制,才能进行计算。

    #!/bin/bash
    
    
    #当小时、分钟是08、09时,计算出现错误,value too great for base (error token is "08") 数值太大不可为算数进制的基 
    #原因是shell将08、09当成了8进制数,而8进制数中合法的最大的数字是7,须让Shell强制将08、09当成10进制来解释,在前面加上10#
    
    v_hour=`date -d "20170701 08:05:00" +%H`
    v_min=`date -d "20170701 08:05:00" +%M`
    
    echo "v_hour is ${v_hour}"
    echo "v_min is ${v_min}"
    
    ## 转换成10进制,才能计算
    let v_hour=10#${v_hour}
    let v_min=10#${v_min}
    
    ## 计算总的分钟数
    let v_total_min=${v_hour}*60+${v_min}
    echo "v_total_min is ${v_total_min}"
    View Code

    结果截图:

    ------------------------传送门------------------------

  • 相关阅读:
    Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列
    我的天!居然可以这么“弹”!—— 弹性盒布局属性详述
    震惊,正儿八经的网页居然在手机上这样显示!
    这是假的JS——利用CSS Animation实现banner图非交互循环播放
    小K的H5之旅-HTML5与CSS3部分新属性浅见
    CSS小技巧-煎蛋的画法~
    小K的H5之旅-实战篇(一)
    SSM+Redis简介
    Hadoop HA(高可用搭建)
    hadoop完全分布式搭建(非高可用)
  • 原文地址:https://www.cnblogs.com/kimbo/p/7102203.html
Copyright © 2020-2023  润新知