date是shell中一個很重要的類,在很多場景中都會用到,例如使用時間戳作爲文件名防止衝突,使用時間字符串來記錄操作日誌等。
常用的時間操作大概有以下使用方式:
以2020年1月3日(星期五)爲例:
# 獲取星期
%a 當前locale 的星期名縮寫,中文數字(如: 五,代表星期五)
%A 當前locale 的星期名全稱 (如: 星期五)
%u 當前locale 的星期名縮寫,阿拉伯數字 (如: 5, 代表星期五)
%w 當前locale 的星期名縮寫,阿拉伯數字 (如: 5, 代表星期五))
#獲取月份
%b 當前locale 的月名縮寫 (如: 1,代表一月)
%B 當前locale 的月名全稱 (如:一月)
%m 當前月份 (01..12) (如: 01, 表示一月)
#獲取完整時間
%c 當前locale 的日期和時間 (如:五,1/ 3 15:36:17 2020)
#獲取世紀
%C 世紀;比如 %Y,通常爲省略當前年份的後兩位數字之後剩餘的部分(如: 20, 表示2020年去掉年份20剩餘的部分)
%d 按月計的日期,不足兩位補0(如: 03, 表示當前月的第三天)
%h 等於%b
%D 按月計的日期,等於%m/%d/%y (如: 01/03/20, 表示20年1月3日)
%e 按月計的日期,等於%_d,不足兩位的日期使用空格補齊,不再使用0補齊
%F 完整日期格式,等價於 %Y-%m-%d (如: 2020-01-03, 表示2020年1月3日)
%g ISO-8601 格式年份的最後兩位 (參見%G) (如:20,表示20年)
%G ISO-8601 格式年份 (參見%V),一般只和 %V 結合使用 (如: 2020, 表示2020年)
%H 24時計時法(00-23) (如: 15,表示下午三點)
%I 12時計時法(00-12) (例如: 3, 表示三點)
%p 當前locale 下的"上午"或者"下午",未知時輸出爲空
%P 與%p 類似,但是輸出小寫字母 (如: p, 表示下午PM)
%j 按年計的日期(001-366) (如: 003, 表示是當前年份中的第三天)
%k hour, space padded ( 0..23); same as %_H
%l hour, space padded ( 1..12); same as %_I
%M 當前分鐘 (00..59) (如: 59, 表示當前時間在當前整點的第59分鐘)
%n 換行
%r 當前locale 下的 12 小時時鐘時間 (如:11:11:04 下午)
%R 24 小時時間的時和分,等價於 %H:%M
%s 時間戳,自UTC 時間 1970-01-01 00:00:00 以來所經過的秒數 (如:1578038808)
%S 當前秒(00-60)
%t 輸出製表符 Tab
%T 時間,等於%H:%M:%S
%U 一年中的第幾周,以週日爲每星期第一天(00-53) (如: 00, 表示當前年份第一週)
%V ISO-8601 格式規範下的一年中第幾周,以週一爲每星期第一天(01-53) (如: 01, 表示當前年份中的第一週)
%W 一年中的第幾周,以週一爲每星期第一天(00-53) (如: 00, 表示當前年份第一週)
%w 一週中的第幾天 (如:2,表示星期二)
%x 當前locale 下的日期描述,年/月/日 (如: 2020/01/03, 表示2020年1月3日)
%X 當前locale 下的時間描述 (如:16時15分42秒)
%y 年份最後兩位數位 (00-99) (如: 20, 表示當前世紀的第20個年頭)
%Y 完整年份 (如: 2020, 表示當前是2020年)
%z 數字時區 (如: +0800, 表示東八區)
%Z 按字母表排序的時區縮寫 (如: CST, 表示中國CST,即東八區)
其中有幾組比較特殊的:
1.表示日期
date +%D 使用"月/日/年"表示當前時間,其中年份只年份中後兩位表示.2019年表示爲19
date +%F 使用"年-月-日"表示當前時間,其中年份只年份中完整表示.2019年表示爲2019
2.表示月份
date +%m 使用兩位阿拉伯數字表示當前月份,不足兩位的用0左側補齊. 二月表示爲:02
date +%b 相當於%_m,不足兩位數字時,使用一位數字表示.二月表示爲:2
date +%B 使用完整中文表示.二月表示爲:二月
3.表示一年中的第幾周
date +%U 使用兩位數字表示當前年份中的第幾周(00-53),使用00表示第一週,所以當前年份中的第六週表示爲:05
date +%V 同%U
date +%W 使用兩位數字表示當前年份中的第幾周(01-54),使用01表示第一週,所以當前年份中的第六週表示爲:06
4.表示星期
date +%a 使用單箇中文數字表示當前星期幾,週三表示爲:三
date +%A 使用完整中文表示當前星期幾,週三表示爲:星期三
date +%u 使用單個阿拉伯數字表示當前星期幾(與%w相同),週三表示爲:3
date +%w 使用單個阿拉伯數字表示當前星期幾(與%u相同),週三表示爲:3
5.表示時:分:秒
date +%r 使用12時計時法表示時鐘時間(後邊會出現 上午|下午)
date +T 使用24時計時法表示時鐘時間(與%r的區別就是:後邊不會出現 上午|下午)
6. 表示當前的時鐘正點數
24時表示法:
date +%H 使用兩位數字表示當前時鐘數,不足位補0
date +k 相當於%_H,即當前時鐘小於10時,只使用一位數字表示;不大於10時,使用兩位數字表示
12時表示法:
date +%I 使用兩位數字表示當前時鐘數,不足兩位的使用0補齊
date +%l 相當於%_I,當前時鐘數不足兩位數字時使用一位數字表示
- 以 "YYYYmmddHHMMSS" 的格式作爲文件名:
fileName=`date "+%Y%m%d%H%M%S"`
#或者使用以下方式
fileName=$(date "+%Y%m%d%H%M%S")
- 以 "YYYY-mm-dd HH:MM:SS: 星期X" 的格式作爲執行日誌的第一條信息:
logMessage=`date +"%Y-%m-%d %H:%M:%S %A"`
#或者
logMessage=`date "+%F %H:%M:%S %A"`
#或者
logMessage=`date "+%F %T %A"`
- 以 "時間戳.ipa" 作爲每次打包的文件名:
ipaName=`date +%s`
ipaFullName=${ipaName}.ipa
- 以 "HH:MM:SS" 的形式顯示當前時間
timeString=`date "+%H:%M:%S"`
#或者
timeString=`date "+%T"`
- 以 "YYYY年mm月dd日 HH時MM分SS秒" 形式展示日期:
timeMessage=`date "+%Y年%m月%d日 %H時%M分%S秒"`
或者
timeMessage=`date "+%Y年%m月%d日 %X"`