date

Linux中date命令的各種實用方法                 2012-07-19 21:35:59

標籤:linux date linux系統

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://521cto.blog.51cto.com/950229/935642            

    在linux環境中,不管是編程還是其他維護,時間是必不可少的,也經常會用到時間的運算,自己也曾經爲時間的各種表示方法和如何修改時間而困惑,熟練運用date命令來表示自己想要表示的時間,肯定可以給自己的工作帶來諸多方便,
    以下是我在工作中積累的關於date命令的用法,絕大多數都有解釋說明,並配有範例,記錄了linux中date命令的各種特定時間的表示方法,如何修改爲特定的時間等,相信讀者在認真讀完並領會接下來的範例之後,一定會對date命令更加熟練,達到舉一反三的效果,從而可以任意表示想要表示的時間,也就可以任意調整服務器的時間了,這其中有網上的各中學習資料,也有date自身的man手冊,也有很多同事的智慧,也有個人的獨立學習,在此也感謝各位前輩的的貢獻和各位同事積極的幫助。如果本文中有錯誤之處,請聯繫QQ:349871740,歡迎指正^_^

1、以下是服務器現在的時間,當前時間的各種表示方法,表示成自己想要的時間格式,後面的範例將會在這個時間基礎之上進行演示,同時這也是熟練掌握後面各種date命令的前提,請讀者注意
[root@RHEL601 tmp]# date
2012年 07月 19日 星期四 20:11:16 CST

讀者可以設定特定的格式,格式設定規則:一個加號後接數個標記,每個標記中都有%,其中可用的標記列表和說明如下:
%n : 下一行
%t : 跳格
%H : 小時(00..23)
%I : 小時(01..12)
%k : 小時(0..23)
%l : 小時(1..12)
%M : 分鐘(00..59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時間 (12 小時制,格式爲 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前爲止的秒數
%S : 秒(00..59)
%T : 直接顯示時間 (24 小時制)
%X : 相當於 %H:%M:%S
%Z : 顯示時區 %a : 星期幾 (Sun..Sat)
%A : 星期幾 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接顯示日期與時間
%d : 日 (01..31)
%D : 直接顯示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第幾天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第幾周 (00..53) (以 Sunday 爲一週的第一天的情形)
%w : 一週中的第幾天 (0..6)
%W : 一年中的第幾周 (00..53) (以 Monday 爲一週的第一天的情形)
%x : 直接顯示日期 (mm/dd/yy)
%y : 年份的最後兩位數字 (00.99)
%Y : 完整年份 (0000..9999)


按照特定的格式輸出時間:短接符"-"、空格" "和冒號":" 爲分隔符,其中空格前面加了轉義符號"\"
[root@RHEL601 tmp]# date +%Y-%m-%d\ %H:%M:%S
2012-07-19 21:10:28

在當前時間的基礎上往前推或者往後推三天
[root@RHEL601 tmp]# date -d "+3 day"
2012年 07月 22日 星期日 20:12:08 CST
[root@RHEL601 tmp]# date -d "-3 day" 
2012年 07月 16日 星期一 20:12:12 CST

在當前時間的基礎上往前推或者往後推三個月
[root@RHEL601 tmp]# date -d "-3 month"   
2012年 04月 19日 星期四 20:12:39 CST
[root@RHEL601 tmp]# date -d "+3 month" 
2012年 10月 19日 星期五 20:12:48 CST

在當前時間的基礎上往前推或者往後推三年
[root@RHEL601 tmp]# date -d "+3 year"     
2015年 07月 19日 星期日 20:13:06 CST
[root@RHEL601 tmp]# date -d "-3 year"  
2009年 07月 19日 星期日 20:13:11 CST

在當前時間的基礎上往前推或者往後推三小時
[root@RHEL601 tmp]# date -d "-3 hour"    
2012年 07月 19日 星期四 17:13:20 CST
[root@RHEL601 tmp]# date -d "+3 hour" 
2012年 07月 19日 星期四 23:13:24 CST

在當前時間的基礎上往前推或者往後推三分鐘
[root@RHEL601 tmp]# date -d "+3 minute"      
2012年 07月 19日 星期四 20:16:56 CST
[root@RHEL601 tmp]# date -d "-3 minute" 
2012年 07月 19日 星期四 20:10:59 CST

在當前時間的基礎上往前推或者往後推三十秒
[root@RHEL601 tmp]# date && date -d "-30 second"        
2012年 07月 19日 星期四 20:14:24 CST
2012年 07月 19日 星期四 20:13:54 CST
[root@RHEL601 tmp]# date && date -d "+30 second" 
2012年 07月 19日 星期四 20:14:29 CST
2012年 07月 19日 星期四 20:14:59 CST

2、接下來的範例說明如何用date來表示各種各樣的時間,表示的都是某一天的零點時間,也可以在當前的時分秒的基礎上表示時間,(特別注意中間用到了反單引號`)參見範例
date -d `date +%y%m01` #本月第一天
[root@RHEL601 tmp]# date -d `date +%y%m01`
2012年 07月 01日 星期日 00:00:00 CST

date -d `date +%y%m01`"-1 day"  #上個月最後一天
[root@RHEL601 tmp]# date -d `date +%y%m01`"-1 day"
2012年 06月 30日 星期六 00:00:00 CST

date -d `date -d "-3 month" +%y%m01`"-1 day" #4個月前的第一天
[root@RHEL601 tmp]# date -d `date -d "-3 month" +%y%m01`"-1 day"
2012年 03月 31日 星期六 00:00:00 CST

date -d `date -d "+12 month" +%y%m01`"-1 day" #第11個月後的第一天
[root@RHEL601 tmp]# date -d `date -d "+12 month" +%y%m01`"-1 day"
2013年 06月 30日 星期日 00:00:00 CST

date -d `date -d "-1 month" +%y%m01` #上個月第一天
[root@RHEL601 tmp]# date -d `date -d "-1 month" +%y%m01`
2012年 06月 01日 星期五 00:00:00 CST


date -d `date -d "+12 month" +%y%m01` #第12個月後的第一天
[root@RHEL601 tmp]# date -d `date -d "+12 month" +%y%m01`
2013年 07月 01日 星期一 00:00:00 CST

date -d `date -d "-1 day" +%Y%m%d` #前一天零點時間
[root@RHEL601 tmp]# date -d `date -d "-1 day" +%Y%m%d`
2012年 07月 18日 星期三 00:00:00 CST

date -d `date -d "-3 day" +%Y%m%d` #前三天零點時間
[root@RHEL601 tmp]# date -d `date -d "-3 day" +%Y%m%d`
2012年 07月 16日 星期一 00:00:00 CST

date -d `date -d "+1 day" +%Y%m%d` #明天零點時間
[root@RHEL601 tmp]# date -d `date -d "+1 day" +%Y%m%d` 
2012年 07月 20日 星期五 00:00:00 CST

date -d `date -d "+3 day" +%Y%m%d` #往後推三天零點時間
[root@RHEL601 tmp]# date -d `date -d "+3 day" +%Y%m%d`
2012年 07月 22日 星期日 00:00:00 CST

 

3、以下簡單示範了字母大小寫在date命令中的區別
Y #代表完整的年份,例如:2012年 將顯示 2012
y #代表縮寫年份,例如:2012年 縮寫爲 12

[root@RHEL601 tmp]# date +"%y%m01%H%M%S"
121201121556
[root@RHEL601 tmp]# date +"%Y%m01%H%M%S"
20121201121610

4、以下範例說明如何調整服務器的時間
ntpdate 210.72.145.44 #將服務器時間調整爲正常時間,210.72.145.44 是國家授時中心服務器IP地址
[root@RHEL601 tmp]# ntpdate 210.72.145.44
19 Jul 13:07:07 ntpdate[15150]: adjust time server 210.72.145.44 offset -0.020920 sec

date 121212122012 #將時間設置爲2012年 12月 12日 星期三 12:12:00,date後面的數字代表月日時分年,還可以加秒,需要後面跟英文狀態下的句號字符".",例如:121212122012.12
[root@RHEL601 tmp]# date 121212122012
2012年 12月 12日 星期三 12:12:00 CST
[root@RHEL601 tmp]# date 121212122012.12
2012年 12月 12日 星期三 12:12:12 CST

[root@RHEL601 tmp]# date `date -d "1 day ago" +%m%d%H%M%Y.%S`
2012年 07月 18日 星期三 20:13:04 CST
[root@RHEL601 tmp]# date
2012年 07月 18日 星期三 20:13:10 CST
[root@RHEL601 tmp]# date `date -d "3 days ago" +%m%d%H%M%Y.%S`
2012年 07月 15日 星期日 20:13:18 CST
[root@RHEL601 tmp]# date `date -d "5 days ago" +%m%d%H%M%Y.%S`
2012年 07月 10日 星期二 20:13:28 CST
[root@RHEL601 tmp]# date `date -d "$((3600*24)) seconds ago" +%m%d%H%M%Y.%S`
2012年 07月 09日 星期一 20:13:39 CST
[root@RHEL601 tmp]# date `date -d "$((3600*24)) seconds ago" +%m%d%H%M%Y.%S`
2012年 07月 08日 星期日 20:14:01 CST
[root@RHEL601 tmp]# ntpdate 210.72.145.44
19 Jul 20:14:15 ntpdate[26846]: step time server 210.72.145.44 offset 950404.037565 sec

參考頁面:1、http://www.cnblogs.com/xd502djj/archive/2010/12/29/1919478.html
寫在最後,由於博客的編輯功能限制,某些字符顯示在頁面上不是很明顯,特意將個人的本地同名總結文檔上傳上來,如果讀者看着頁面中的不習慣,可以下載附件閱讀。 

本文出自 “開源一員” 博客,請務必保留此出處http://521cto.blog.51cto.com/950229/935642


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