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} \tv_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

結果截圖:

 

------------------------傳送門------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM