Linux Shell:date日期时间操作

摘要: Linux Shell

整理Linux Shell脚本中常用的日期操作,给予 date 命令,主要用法总结

  • 获得当前日期,时间戳, date , date '+%s'
  • 日期解析(字符串转日期,时间戳转日期) date -d
  • 日期格式化输出, date '+%'
  • 提取日期元素, date '+%'
  • 日期加减计算(求指定间隔的新日期,求两日期之差), date -d
  • 比较日期大小, 字符串大小
  • 计算耗时, data '+%s'

    获得当前日期,时间戳

    直接使用date命令就可以得到当前时间日期,输出格式是CST格式

    2021年 08月 17日 星期二 22:34:35 CST

    获得当前日期的正常格式,比如时间日期型 %Y-%m-%d $H:%M:%S ,或者日期型 %Y-%m-%d %Y%m%d ,使用 +日期格式 实现格式化, date后面必须要有至少一个空格 ,如果日期格式存在空格需要用引号包起来

    date '+%Y-%m-%d %H:%M:%S'
    2021-08-17 22:49:57
    date '+%Y-%m-%d'
    2021-08-17
    date '+%Y%m%d'
    20210817
    date +%Y%m%d
    20210817
    

    获得当前时间戳,使用+%s即可获得10位时间戳

    date +%s
    1629211600
    

    日期解析(字符串转日期,时间戳转日期)

    日期解析使用data -d命令,可以解析指定的字符串日期为CST格式时间

    date -d '2021-06-18 13:13:13'
    2021年 06月 18日 星期五 13:13:13 CST
    date -d '2021-06-18'
    2021年 06月 18日 星期五 00:00:00 CST
    date -d '20210618'
    2021年 06月 18日 星期五 00:00:00 CST
    

    date -d接受字符串描述,可以使用以下格式语句将10位时间戳转化为日期格式

    date -d @1629535772
    2021年 08月 21日 星期六 16:49:32 CST
    

    进一步将时间戳转化为指定格式日期

    date -d @1629535772 '+%Y-%m-%d %H:%M:%S'
    2021-08-21 16:49:32
    
    # 日期型转年月
     date -d '2021-05-18' '+%Y-%m'
    2021-05
    
    # 日期型转时间日期型
    date -d '2021-05-18' '+%Y-%m-%d %H:%M:%S'
    2021-05-18 00:00:00
    

    日期格式化输出

    日期格式化输出使用类似于' +%Y-%m-%d'的格式

    # 将时间日期型转化为日期型
    date -d '2021-05-18 13:12:19' '+%Y-%m-%d'
    2021-05-18
    

    提取日期元素

    提取年,月,日,时,分,秒

    date +%Y  # 2021
    date +%m  # 08
    date +%d  # 21
    date +%H  # 17
    date +%M  # 16
    date +%S  # 07
    
    # 提取指定时间的年
    date -d '2018-05-13' '+%Y'  # 2018
    

    日期加减计算

    (1)求日期间隔下的新日期

    以当下时间为基准,可以使用字符串描述求明天,昨天,几小时,几天之前的日期

    date -d 'yesterday'
    2021年 08月 20日 星期五 17:24:14 CST
    date -d 'tomorrow'
    2021年 08月 22日 星期日 17:24:54 CST
    date -d 'next day'
    2021年 08月 22日 星期日 17:24:54 CST
    date -d '2 days ago'
    2021年 08月 19日 星期四 17:24:24 CST
    date -d '1 hour ago'
    2021年 08月 21日 星期六 16:24:33 CST
    

    也可以对指定的日期进行间隔计算

    # 求指定日期的之前1个小时
    date -d '2021-03-03 11:11:11 1 hour ago' 
    2021年 03月 03日 星期三 10:11:11 CST
    
    # 求指定日期之前1天的时间
    date -d '2021-01-01 -1day'
    # 求指定日期之后1天的时间
    date -d '2021-01-01 +1day'
    2021年 01月 02日 星期六 00:00:00 CST
    # 求指定日期之前1分钟
    date -d '2021-01-01 1 minute ago'
    2020年 12月 31日 星期四 23:59:00 CST
    
    (2)求两个日期之间的差

    先转化为时间戳,求间隔的秒数,然后再求对应的时分天

    # 求几个几天
    t1='2021-03-12'
    t2='2021-03-18'
    diff=$(((`date -d "$t2" '+%s'` - `date -d "$t1" '+%s'`) / 86400))
    echo $diff  # 6
    

    比较日期大小

    日期比较大小直接使用字符串形式比较,比较符是>,<,=,使用双中括号进行比较,如果是单中括号对于>需要转义\>

    [[ '2021-01-01' > '2021-12-26' ]] && echo 1 || echo 0
    [[ '2021-01-01' > '2020-12-26' ]] && echo 1 || echo 0
    

    耗时使用时间戳秒格式进行相减即可

    #!/bin/bash