“D” 开头的命令

“D” 开头的命令

date 命令

  • 获取时间

    • date

      • 返回当前系统时间
      • 默认显示当前时区时间:“年 月 日 星期几 时分秒 时区”
      • 2022年 02月 13日 星期日 14:30:59 CST
    • date -u

      • 返回 UTC 时间
      • 2022年 02月 13日 星期日 06:31:02 UTC
    • date -d "日期时间字符串"

      • 返回字符串指定的时间

      • date -d "2020-02-02"
        date -d "2020-02-02 13:01:55.123"
        
  • 以指定格式显示时间

    • date +%F' '%T
      date '+%F %T'
      date +%F" "%T
      date "+%F %T"
      # 四者等效,输出:2022-02-13 14:05:17
      
      • %F ,完整日期格式,等价于 %Y-%m-%d
      • %D ,按月计的日期;等于 %m/%d/%y(相对不常用)
      • %T ,时间,等价于 %H:%M:%S
      • 输出格式中间插 “空格” 要使用引号括起来,插其他字符不用
    • date 命令不能直接获取毫秒格式的时间戳

      • %s ,自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数

      • %N这一秒的第几纳秒(000000000-999999999)

      • 结合这两个参数可以获取准确的毫秒时间戳:

        • echo $[$(date +%s%N)/1000000]
      • 也可以获取 “年-月-日 时:分:秒.毫秒” 的日期时间格式:

        • date +%F' '%H:%M:%S.%N | cut -b 1-23
          date +%F' '%T.%N | cut -b 1-23
          
  • 获取某个时间周期的起止日期

      • do_date='2021-11-03'
        
        year_1st_day=`date -d "$do_date" +%Y-01-01`
        year_last_day=`date -d "$year_1st_day 1 year -1 day" +%F`
        
        echo 当年第一天是:`date -d "$year_1st_day" +%F`
        echo 当年最后一天是:`date -d "$year_last_day" +%F`
        
        echo 上一年第一天是:`date -d "$year_1st_day -1 year" +%F`
        echo 上一年最后一天是:`date -d "$year_1st_day -1 day" +%F`
        
      • do_date='2021-11-03'
        
        month=`date -d "$do_date" +%m`
        i=`echo "scale=0; $month / 3.1" | bc` # 月份/3.1 + 1
        quarter_num=$[$i+ 1]
        
        first_month=$[i * 3 + 1]
        quarter_1st_day=`date -d "$do_date" +%Y-$first_month-01`
        quarter_last_day=`date -d "$quarter_1st_day 3 month -1 day" +%F`
        
        echo 当季第一天是:`date -d "$quarter_1st_day" +%F`
        echo 当季最后一天是:`date -d "$quarter_last_day" +%F`
        
        echo 上一季第一天是:`date -d "$quarter_1st_day -3 month" +%F`
        echo 上一季最后一天是:`date -d "$quarter_1st_day -1 day" +%F`
        
      • do_date='2020-03-03'
        
        this_month_1st_day=`date -d "$do_date " +%Y-%m-01`
        next_month_last_day=`date -d "$do_date 1 month" +%Y-%m-01`
        
        echo 当月第一天是:$this_month_1st_day
        echo 当月最后一天是:`date -d "$next_month_last_day -1 day" +%F`
        
        echo 上月第一天是:`date -d "$do_date -1 month" +%Y-%m-01`
        echo 上月最后一天是:`date -d "$this_month_1st_day -1 day" +%F`
        
      • 以周一作为一周的开始

      • do_date='2021-11-03'
        
        diff_for_last_sunday=$[date -d "$do_date" +%u]                    # 当天属于一周中的第 n 天
        last_sunday=`date -d "$do_date -$diff_for_last_sunday days" +%F`  # 往前推 n 天就是上周日
        
        echo 当周周一是:`date -d "$last_sunday 1 days" +%F`
        echo 当周周日是:`date -d "$last_sunday 7 days" +%F`
        
        echo 上周周一是:`date -d "$last_sunday -6 days" +%F`
        echo 上周周日是:$last_sunday
        
  • 获取文件的修改时间

    • date -r 文件名/目录名
  • 设置时间

    • date -s "2020-02-02 20:02:02"
    • 较少使用,一般通过 NTP 服务设置时间