Linux 命令每日一練:date

命令簡介

date命令的功能是顯示或設置系統時間與日期。很多shell腳本里面需要打印不同格式的時間或日期,以及要根據時間和日期執行操作。延時通常用於腳本執行過程中提供一段等待的時間。日期可以用多種格式去打印,也可以使用命令設置固定的格式。在類UNIX系統中,日期被存儲爲一個整數,其大小爲自世界標準時間(UTC)1970年1月1日0時0分0秒起流逝的秒數。

命令格式

date 以系統默認格式顯示當前系統的時間
[root@myhosy ~]# date
Tue Mar  5 09:54:56 CST 2019
date 格式化顯示日期(以+開頭,引號內再接你想要的日期格式字符串列表)
[root@myhosy ~]# date "+%F"
2019-03-05

命令參數

-d:顯示由datestr所描述日期或時間。
-s:根據datestr來設置日期或時間。datestr前後必須加上雙引號;
-u: universal顯示GMT;
–help:在線幫助;
–version:顯示版本信息。

日期格式字符串列表

  • %H 小時,24小時制(00~23) ##常用
  • %I 小時,12小時制(01~12)
  • %k 小時,24小時制(0~23)
  • %l 小時,12小時制(1~12)
  • %M 分鐘(00~59) ##常用
  • %p 顯示出AM或PM
  • %r 顯示時間,12小時制(%H:%M:%S %p)04:34:41 PM
  • %s 從1970年1月1日00:00:00到目前經歷的秒數1524559123
  • %S 顯示秒(00~59) ##常用
  • %T 顯示時間,24小時制(%H:%M:%S)16:35:29
  • %X 顯示時間的格式(%H:%M:%S)04:34:41 PM
  • %Z 顯示時區,日期域(CST)
  • %a 星期的簡稱(Sun~Sat)Tue
  • %A 星期的全稱(Sunday~Saturday)Tuesday
  • %h或%b 月的簡稱(Jan~Dec)Apr
  • %B 月的全稱(January~December)April
  • %c 日期和時間(Tue 24 Apr 2018 04:40:23 PM CST)
  • %d 一個月的第幾天(01~31) ##常用
  • %x年月日(mm/dd/yyyy)04/24/2018
  • %D年月日(mm/dd/yy)04/24/18
  • %j 一年的第幾天(001~366)
  • %m 月份(01~12) ##常用
  • %w一個星期的第幾天(0代表星期天)
  • %W 一年的第幾個星期(00~53,星期一爲第一天)
  • %y 年的最後兩個數字(2018則是18)
  • %Y年的四個數字(2018則是2018) ##常用
  • %F 年月日(yyyy-mm-dd)2018-04-24 ##常用

實戰演練及總結

以系統默認格式打印當前日期或時間

[root@myhost ~]# date
Tue Mar  5 10:13:49 CST 2019
[root@myhost ~]# echo ` date ` 
Tue Mar 5 10:13:50 CST 2019
[root@myhost ~]# echo $(date)
Tue Mar 5 10:14:06 CST 2019

以yyyy-mm-dd格式打印當前日期或時間

[root@myhost ~]#  date +%F  
2019-03-05
[root@myhost ~]#  date +"%F"  
2019-03-05
[root@myhost ~]# echo ` date +%F  `
2019-03-05
[root@myhost ~]# echo $(date +%F)
2019-03-05

以yyyy-mm-dd HH:MM:SS格式打印當前日期或時間

[root@myhost ~]# date +"%F\ %H:%M:%S"
2019-03-05 10:17:04
[root@myhost ~]# date +"%Y-%m-%d\ %H:%M:%S"  
2019-03-05 10:20:56

輸出前幾天的日期

[root@myhost ~]# date  +%Y-%m-%d  -d "2 day ago"
2019-03-03
[root@myhost ~]# date  +%Y-%m-%d  --date="2 day ago"
2019-03-03
[root@myhost ~]# date  +%F -d "2 day ago"
2019-03-03
[root@myhost ~]# date  +%F --date="2 day ago"
2019-03-03

輸出3小時前的日期或時間

[root@myhost~]# date   +"%Y-%m-%d %H:%M:%S"  -d "3 hour ago"  
2019-03-05 07:28:45
[root@myhost~]#  date   +"%Y-%m-%d %H:%M:%S"  --date="3 hour ago"   
2019-03-05 07:31:41

輸出20秒後的日期或時間

[root@myhost~]# date   +"%Y-%m-%d %H:%M:%S"  -d "20 second" 
2019-03-05 10:32:49
[root@myhost~]# date   +"%Y-%m-%d %H:%M:%S"  --date="20 second"
2019-03-05 10:32:58

傳說中的 1234567890 秒

[root@myhost ~]# date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30

普通轉格式化

[root@myhost ~]# date -d "2009-12-12" +"%Y/%m/%d %H:%M:%S"
2009/12/12 00:00:00
[root@myhost ~]# date -d "2009-12-12" +"%s"
1260547200

apache日期時間格式轉換

[root@myhost ~]#  date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M:%S"
2009-12-05 00:00:37
[root@myhost ~]#  date -d "Dec 5, 2009 12:00:37 AM" +"%s"
1259942437

格式轉換後時間遊走

[root@myhost ~]# date -d "Dec 5, 2018 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M:%S"
2016-12-05 00:00:37
[root@myhost ~]# date -d "Dec 5, 2018 12:00:37 AM 2 year ago" +"%s"
1480867237

把時間轉成秒數

[root@myhost  ~]# date
Tue Mar  5 14:41:54 CST 2019
[root@myhost  ~]# date +%s
1551768131
[root@myhost  ~]# date -d "Tue Mar  5 14:41:54 CST 2019"  +%s
1551768114

把秒數轉換成標準時間格式

[root@myhost  ~]#  date -d '1970-1-1 0:0:0 GMT + 1551768114 seconds'
Tue Mar  5 14:41:54 CST 2019
[root@myhost  ~]#  date -d @1551768114
Tue Mar  5 14:41:54 CST 2019
[root@myhost  ~]#  date -d @1551768114 +%F
2019-03-05

時間加減操作

date +%Y%m%d                  #顯示當天年月日
date +%Y%m%d-d "+1 day"       		#顯示後一天的日期
date +%Y%m%d  -d "-1 day" 				#顯示前一天的日期
date +%Y%m%d  -d "+1 month"   		#顯示下一月的日期
date +%Y%m%d  -d "-1 month"			#顯示上一月的日期
date +%Y%m%d  -d "+1 year"     		#顯示下一年的日期
date +%Y%m%d  -d "-1 year"				#顯示前一年的日期

設定時間

date -s                   #設置當前時間,只有root權限才能設置,其他只能查看
date -s 20120523            #設置日期爲20120523,設置時分秒成空00:00:00
date -s 01:01:01               #設置時分秒時間,不會對日期做更改
date -s "01:01:01 2012-05-23"  	#這樣可以設置日期+時分秒
date -s "01:01:01 20120523"   		#這樣可以設置日期+時分秒
date -s "2012-05-23 01:01:01"  	#這樣可以設置設置日期+時分秒
date -s "20120523 01:01:01"    	#這樣可以設置設置日期+時分秒

拓展

有時需要檢查一組命令花費的時間
#!/bin/bash
source /etc/profile

#define variables
start=`date +"%s" `
#start your command
ll /home
end=`date +"%s" `
#let span=end-start
#span=$((end-start))
#span=($end-$start)

echo $span seconds.

如何進行兩個整數相加?更多參考:
https://blog.csdn.net/yuki5233/article/details/84848834

建議使用別名簡化並轉換成我們熟悉的時間格式
alias d=' date +"%F %T" '
[root@myhost  ~]# date +"%F %T"
2019-03-05 14:48:34
[root@myhost  ~]# d
2019-03-05 14:48:34

alias d=' date +"%F %T" -d '
[root@myhost  ~]# date +"%F %T" -d @1551768114
2019-03-05 14:41:54
[root@myhost  ~]#dd @1551768114
2019-03-05 14:41:54

最後可以把這兩個alias語句放入.bash_profile中,登陸後即可使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章