每天学一点儿shell:linux中时间函数的date的用法
生活随笔
收集整理的這篇文章主要介紹了
每天学一点儿shell:linux中时间函数的date的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1、linux中date函數格式
- 2、date日期函數的具體用法
- 2.1、獲取相應格式的日期
- 2.2、獲取相隔時間段的日期
- 2.2.1、獲取今天的日期
- 2.2.2、獲取昨天的日期
- 2.2.3、獲取明天的日期
- 2.3、獲取當前時間戳
- 2.4、將指定時間字符串轉成日期格式
- 2.5、獲取指定日期前1天的日期
- 2.6、獲取指定日期后1天的日期
- 2.7、獲取指定日期上1個月的第一天
- 2.8、獲取指定日期上1個月的最后一天
1、linux中date函數格式
首先date函數的使用格式如下:
用法:date [選項]... [+格式]或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]其中的格式解釋所示:
| %% | 一個文字的 % |
| %a | 當前locale 的星期名縮寫(例如: 日,代表星期日) |
| %A | 當前locale 的星期名全稱 (如:星期日) |
| %b | 當前locale 的月名縮寫 (如:一,代表一月) |
| %B | 當前locale 的月名全稱 (如:一月) |
| %c | 當前locale 的日期和時間 (如:2005年3月3日 星期四 23:05:25) |
| %C | 世紀;比如 %Y,通常為省略當前年份的后兩位數字(例如:20) |
| %d | 按月計的日期(例如:01) |
| %D | 按月計的日期;等于%m/%d/%y |
| %e | 按月計的日期,添加空格,等于%_d |
| %F | 完整日期格式,等價于 %Y-%m-%d |
| %g | ISO-8601 格式年份的最后兩位 (參見%G) |
| %G | ISO-8601 格式年份 (參見%V),一般只和 %V 結合使用 |
| %h | 等于%b |
| %H | 小時(00-23) |
| %I | 小時(00-12) |
| %j | 按年計的日期(001-366) |
| %k | hour, space padded ( 0…23); same as %_H |
| %l | hour, space padded ( 1…12); same as %_I |
| %m | month (01…12) |
| %M | minute (00…59) |
| %n | 換行 |
| %N | 納秒(000000000-999999999) |
| %p | 當前locale 下的"上午"或者"下午",未知時輸出為空 |
| %P | 與%p 類似,但是輸出小寫字母 |
| %r | 當前locale 下的 12 小時時鐘時間 (如:11:11:04 下午) |
| %R | 24 小時時間的時和分,等價于 %H:%M |
| %s | 自UTC 時間 1970-01-01 00:00:00 以來所經過的秒數 |
| %S | 秒(00-60) |
| %t | 輸出制表符 Tab |
| %T | 時間,等于%H:%M:%S |
| %u | 星期,1 代表星期一 |
| %U | 一年中的第幾周,以周日為每星期第一天(00-53) |
| %V | ISO-8601 格式規范下的一年中第幾周,以周一為每星期第一天(01-53) |
| %w | 一星期中的第幾日(0-6),0 代表周一 |
| %W | 一年中的第幾周,以周一為每星期第一天(00-53) |
| %x | 當前locale 下的日期描述 (如:12/31/99) |
| %X | 當前locale 下的時間描述 (如:23:13:48) |
| %y | 年份最后兩位數位 (00-99) |
| %Y | 年份 |
| %Z | 按字母表排序的時區縮寫 (例如,EDT) |
2、date日期函數的具體用法
2.1、獲取相應格式的日期
輸出日期格式為yyyy-MM-dd HH:mm:ss的時間,以當前日期時間為例:
方式一:
[root@hadoop-master ~]# date -d today +"%Y-%m-%d %T" 2020-09-16 19:45:39方式二:
[root@hadoop-master ~]# date +"%Y-%m-%d %T" 2020-09-16 19:48:39方式三:
[root@hadoop-master ~]# date +"%Y-%m-%d %H:%M:%S" 2020-09-16 19:51:42舉個其他數據格式的例子,例如輸出格式為yyyMMddHHmmss格式
[root@hadoop-master ~]# date +"%Y%m%d%H%M%S" 202009161954082.2、獲取相隔時間段的日期
2.2.1、獲取今天的日期
方式一:
[root@hadoop-master ~]# date +%Y%m%d 20200916方式二:
[root@hadoop-master ~]# date +%F 2020-09-16方式三:
[root@hadoop-master ~]# echo $(date +%Y%m%d) 202009162.2.2、獲取昨天的日期
方式一:
[root@hadoop-master ~]# date -d yesterday +%Y%m%d 20200915方式二:
[root@hadoop-master ~]# date -d -1day +%Y%m%d 20200915方式三:
[root@hadoop-master ~]# date -d "-1 day" +%Y%m%d 20200915方式四:
[root@hadoop-master ~]# date +%Y%m%d --date="-1 day" 20200915方式五:
[root@hadoop-master ~]# date +%Y%m%d --date="1 day ago" 20200915根據以上的表達式我們推測出17天前的日期為:
[root@hadoop-master ~]# date +%Y%m%d --date=-17day 20200830同理也可以推理出上一個小時為:
[root@hadoop-master ~]# date +"%Y-%m-%d %H:%M:%S" --date=-1hour 2020-09-16 19:15:00上一分鐘為:
[root@hadoop-master ~]# date +"%Y-%m-%d %H:%M:%S" --date=-1minute 2020-09-16 20:14:34同理獲取上一年,上一月,上一天,上一小時,上一分鐘,上一秒,不多擴展了。
2.2.3、獲取明天的日期
根據上面的我們很容易推測出明天的日期計算方式:
方式一:
方式二:
[root@hadoop-master ~]# date +%Y%m%d --date=+1day 20200917方式三:
[root@hadoop-master ~]# date +%Y%m%d --date="+1 day" 20200917同理可以推測出17天后是:
[root@hadoop-master ~]# date +%Y%m%d --date="+17 day" 202010032.3、獲取當前時間戳
注意一下的是自UTC 時間 1970-01-01 00:00:00 以來所經過的秒數,如果是使用更精確的時間戳則不能使用這個
[root@hadoop-master ~]# date +%s 1600258838下面是獲取當前時間的納秒數,精確到億分之一秒,這個是秒后面的值
[root@hadoop-master ~]# date +%N 713781544獲取當前時間的毫秒數
[root@hadoop-master ~]# echo $((`date '+%s'`*1000+`date '+%N'`/1000000)) 1600259292777不過這個有個缺陷會報錯:
[root@hadoop-master ~]# echo $((`date '+%s'`*1000+`date '+%N'`/1000000)) -bash: 1600259263*1000+097437620: 數值太大不可為算數進制的基 (錯誤符號是 "097437620")2.4、將指定時間字符串轉成日期格式
把字符串轉成時間戳
[root@hadoop-master ~]# date +%s --date="2020-09-16" 1600185600把時間戳轉成時間
[root@hadoop-master ~]# date -d @1600185600 "+%Y-%m-%d" 2020-09-162.5、獲取指定日期前1天的日期
方式一:
[root@hadoop-master ~]# date -d "20210221 1 day ago" +%Y-%m-%d 2021-02-20方式二:
[root@hadoop-master ~]# date -d "20210221 -1 day" +%Y-%m-%d 2021-02-20方式三:
[root@hadoop-master ~]# date -d "20210221 -1day" +%Y-%m-%d 2021-02-20方式四:
[root@hadoop-master ~]# date -d "20210221 yesterday" +%Y-%m-%d 2021-02-20方式五:
[root@hadoop-master ~]# date -d "20210221" --date="-1 day" +%Y-%m-%d 2021-02-20方式六:
[root@hadoop-master ~]# date -d "20210221 last day" +%Y-%m-%d 2021-02-20根據上面可以類推指定日期前3天的日期為:
[root@hadoop-master ~]# date -d "20210221 3 day ago" +%Y-%m-%d 2021-02-182.6、獲取指定日期后1天的日期
方式一:
[root@hadoop-master ~]# date -d "20210221 +1 day" +%Y-%m-%d 2021-02-22方式二:
[root@hadoop-master ~]# date -d "20210221 1 day" +%Y-%m-%d 2021-02-22方式三:
[root@hadoop-master ~]# date -d "20210221 1day" +%Y-%m-%d 2021-02-22方式四:
[root@hadoop-master ~]# date -d "20210221" --date="+1 day" +%Y-%m-%d 2021-02-22根據上面可以類推指定日期后3天的日期為:
[root@hadoop-master ~]# date -d "20210221 +3 day" +%Y-%m-%d 2021-02-242.7、獲取指定日期上1個月的第一天
注意每一個月的天數可能不一樣,取當前日期月份1號來獲取上一個月的月份。
示例:獲取20210221的上一個月的月份
方式一:
方式二:
[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` last month" +%Y-%m-01 2021-01-012.8、獲取指定日期上1個月的最后一天
方式一:
[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` -1 day" +%Y-%m-%d 2021-01-31方式二:
[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` -1day" +%Y-%m-%d 2021-01-31方式三:
[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` yesterday" +%Y-%m-%d 2021-01-31方式四:
[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` 1 day ago" +%Y-%m-%d 2021-01-31方式五:
[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` last day" +%Y-%m-%d 2021-01-31總結
以上是生活随笔為你收集整理的每天学一点儿shell:linux中时间函数的date的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天学一点儿shell:Shell的常用
- 下一篇: 每天学一点儿shell:Linux三剑客