bash時間處理

longqidong發表於2013-04-25

bash中時間處理主要透過date命令實現,轉自網上一篇文章

 
  date命令的功能是顯示和設定系統日期和時間。 
  該命令的一般格式為: date [選項] 顯示時間格式(以+開頭,後面接格式) 
  date 設定時間格式 
  命令中各選項的含義分別為: 
  -d dates, --date datestr 顯示由datestr描述的日期 
  -s datestr, -- datestr 設定datestr 描述的日期 
  -u, --universal 顯示或設定通用時間 時間域 
  % H 小時(00..23) 
  % I 小時(01..12) 
  % k 小時(0..23) 
  % l 小時(1..12) 
  % M 分(00..59) 
  % p 顯示出AM或PM 
  % r 時間(hh:mm:ss AM或PM),12小時 
  % s 從1970年1月1日00:00:00到目前經歷的秒數 
  % S 秒(00..59) 
  % T 時間(24小時制)(hh:mm:ss) 
  % X 顯示時間的格式(%H:%M:%S) 
  % Z 時區 日期域 
  % a 星期幾的簡稱( Sun..Sat) 
  % A 星期幾的全稱( Sunday..Saturday) 
  % b 月的簡稱(Jan..Dec) 
  % B 月的全稱(January..December) 
  % c 日期和時間( Mon Nov 8 14:12:46 CST 1999) 
  % d 一個月的第幾天(01..31) 
  % D 日期(mm//yy) 
  % h 和%b選項相同 
  % j 一年的第幾天(001..366) 
  % m 月(01..12) 
  % w 一個星期的第幾天(0代表星期天) 
  % W 一年的第幾個星期(00..53,星期一為第一天) 
  % x 顯示日期的格式(mm/dd/yy) 
  % y 年的最後兩個數字( 1999則是99) 
  % Y 年(例如:1970,1996等) 
  需要特別說明的是,只有超級使用者才能用date命令設定時間,一般使用者只能用date命令顯示時間。 

 

下列環境變數將會影響到 date 命令的執行效果。 資料整理
 
LANG 確定在 LC_ALL 和相應的環境變數(以 LC_ 開頭)都不指定語言環境的時候將要使用的預設語言環境。
LC_ALL 確定用於覆蓋由 LANG 或任何以 LC_ 開頭的環境變數設定的任何語言環境類別值的語言環境。
LC_CTYPE 確定文字資料的位元組序列解釋為字元時使用的語言環境(例如引數中單對多位元組字元)。
LC_MESSAGES 決定寫資訊應使用的語言。
LC_TIME 確定由 date 寫入的日期和時間字串的內容。
NLSPATH 為處理 LC_MESSAGES 決定訊息目錄的位置。
TZ 指定時間和日期使用的時區,除非指定了 -u 選項。如果未設定 TZ 變數且未指定 -u 標誌,則使用非指定的系統預設時區。
 
使用示例一:
 

#date //顯示當前日期

#date -s //設定當前時間,只有root許可權才能設定,其他只能檢視。

#date -s 20061010 //設定成20061010,這樣會把具體時間設定成空00:00:00

#date -s 12:23:23 //設定具體時間,不會對日期做更改

#date -s “12:12:23 2006-10-10″ //這樣可以設定全部時間

CST:中國標準時間(China Standard Time),這個解釋可能是針對RedHat Linux。

UTC:協調世界時,又稱世界標準時間,簡稱UTC,從英文國際時間/法文協調時間”Universal Time/Temps Cordonné”而來。中國大陸、香港、澳門、臺灣、蒙古國、新加坡、馬來西亞、菲律賓、澳洲西部的時間與UTC的時差均為+8,也就是UTC+8。

GMT:格林尼治標準時間(舊譯格林威治平均時間或格林威治標準時間;英語:Greenwich Mean Time,GMT)是指位於英國倫敦郊區的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在透過那裡的經線。

設定完系統時間後,還需要同步到硬體時鐘上
# clock --systohc

硬體時鐘與系統時鐘同步:

# hlock --hctosys
或者
# clock --hctosys

上面命令中,--hctosys表示Hardware Clock to SYStem clock。

系統時鐘和硬體時鐘同步:

#  --systohc
或者
# clock --systohc

使用示例二:

 

    用指定的格式顯示時間。 
  $ date &quo;+This date now is =>%x , is now =>%X ,thank you !' 
  This date now is =>11/12/99 ,time is now =>17:53:01 ,thank you ! 
  用預定的格式顯示當前的時間。 
  # date 
  Fri Nov 26 15:20:18 CST 1999 
  設定時間為下午14點36分。 
  # date -s 14:36:00 
  Fri Nov 26 14:15:00 CST 1999 
  設定時間為1999年11月28號。 
  # date -s 991128 
  Sun Nov 28 00:00:00 CST 1999 
   設定一天前
     date --date "1 days ago" +"%Y-%m-%d"
    Date 命令引數小技巧
 
由於Linux對man date -d 引數說的比較模糊,故舉例如下:
# -d, --date=STRING  display time described by STRING, not `now'
For Linux
[root@linuxso.com ~ ]# date -d nt-day +%Y%m%d
20060328
[root@linuxso.com ~ ]# date -d last-day +%Y%m%d
20060326
[root@linuxso.com ~ ]# date -d yesterday +%Y%m%d
20060326
[root@linuxso.com ~ ]# date -d tomorrow +%Y%m%d
20060328
[root@linuxso.com ~ ]# date -d last-month +%Y%m
200602
[root@linuxso.com ~ ]# date -d next-month +%Y%m
200604
[root@linuxso.com ~ ]# date -d next-year +%Y
2007
------------------------------------------
而FreeBSD則不同;舉例如下:
For FreeBSD
[root@linuxso.com ~]# date -v -1d +%Y%m%d
20060326
[root@linuxso.com ~]#  date -v -1m +%Y%m%d 
20060227
[root@linuxso.com ~]#  date -v -1y +%Y%m%d 
20050327
使用示例三:
在linux環境下要取得幾天前的時期只要使用
date -d "x days ago" +%Y%m%d
x用數字代替,如果需要幾天前的直接寫正數,如果要幾天後的日期直接寫負數即可;
date -d "x weeks ago" +%Y%m%d
x用數字代替,如果需要幾周前的直接寫正數,如果要幾周後的日期直接寫負數即可;
date -d "x years ago" +%Y%m%d
x用數字代替,如果需要幾年前的直接寫正數,如果要幾年後的日期直接寫負數即可;
看下面例子:
[root@linuxso.com ~]# date +%Y%m%d
20100107
上面是今天的日期20100107
[root@linuxso.com ~]# date -d "2 days ago" +%Y%m%d         
20100105
 
上面是兩天前的日期
[root@linuxso.com ~]# date -d "4 days ago" +%Y%m%d 
20100103
上面是四天前的日期
 
[root@linuxso.com ~]# date -d "-1 days ago" +%Y%m%d
20100108
上面是一天後的日期
[root@linuxso.com ~]# date -d "-2 days ago" +%Y%m%d 
20100109
上面是兩天後的日期
[root@linuxso.com ~]# date -d "1 week ago" +%Y%m%d      
20091231
上面是一週前的日期
[root@linuxso.com ~]# date -d "1 year ago" +%Y%m%d    
20090107
上面是一年前的日期

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22418990/viewspace-759286/,如需轉載,請註明出處,否則將追究法律責任。

相關文章