date命令
date命令的功能是顯示和設置系統日期和時間。
該命令的一般格式為: date [選項] 顯示時間格式(以+開頭,後面接格式)
date 設置時間格式
命令中各選項的含義分別為:
-d datestr, --date datestr 顯示由datestr描述的日期
-s datestr, --set 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/dd/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
硬件時鐘與系統時鐘同步:
# hwclock --hctosys
或者
# clock --hctosys
上面命令中,--hctosys表示Hardware Clock to SYStem clock。
系統時鐘和硬件時鐘同步:
# hwclock --systohc
或者
# clock --systohc
使用示例二:
用指定的格式顯示時間。
$ date ‘+This date now is =>%x ,time 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
[
[email protected] ~ ]# date -d next-day +%Y%m%d
20060328
[
[email protected] ~ ]# date -d last-day +%Y%m%d
20060326
[
[email protected] ~ ]# date -d yesterday +%Y%m%d
20060326
[
[email protected] ~ ]# date -d tomorrow +%Y%m%d
20060328
[
[email protected] ~ ]# date -d last-month +%Y%m
200602
[
[email protected] ~ ]# date -d next-month +%Y%m
200604
[
[email protected] ~ ]# date -d next-year +%Y
2007
------------------------------------------
而FreeBSD則不同;舉例如下:
For FreeBSD
[
[email protected] ~]# date -v -1d +%Y%m%d
20060326
[
[email protected] ~]# date -v -1m +%Y%m%d
20060227
[
[email protected] ~]# 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用數字代替,如果需要幾年前的直接寫正數,如果要幾年後的日期直接寫負數即可;
看下面例子:
[
[email protected] ~]# date +%Y%m%d
20100107
上面是今天的日期20100107
[
[email protected] ~]# date -d "2 days ago" +%Y%m%d
20100105
上面是兩天前的日期
[
[email protected] ~]# date -d "4 days ago" +%Y%m%d
20100103
上面是四天前的日期
[
[email protected] ~]# date -d "-1 days ago" +%Y%m%d
20100108
上面是一天後的日期
[
[email protected] ~]# date -d "-2 days ago" +%Y%m%d
20100109
上面是兩天後的日期
[
[email protected] ~]# date -d "1 week ago" +%Y%m%d
20091231
上面是一周前的日期
[
[email protected] ~]# date -d "1 year ago" +%Y%m%d
20090107
上面是一年前的日期